JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)
1.数组创建及初始化
var obj=new Array();
var arr=[];
可以延伸为长度一定的,字面量定义数组
2.堆栈 按值传递 引用类型
数组是引用类型,不是值传递,
栈:系桶自动分配和释放 ,比如函数的参数、局部变量 先进后出 一级缓存
堆:一般由程序员分配释放,程序结束后系统回收 先进先出 二级缓存
3.关联数组和索引数组
关联数组即hash数组,本质上js底层,一切对象都是关联数组
所以以下写法能产生运行结果,
能运行结果:2
var keys=[1,2,3,4];
console.log(keys["1"]);
4.删除数组里面重复元素:(常规解法&hash数组解法对比)
1.常规方法思路:创建一个数组,然后用原有数组里面的元素和新数组里面的所有元素依次对比,若不同,就将此元素增加为新数组最后一个元素
function f(arr) //实现删除数组内重复的元素
{
var arrc=[];
//拿出arr第一个元素,放入arrc数组第一个
arrc[0]=arr[0];
//遍历arr数组,从1开始,取出元素,与arrc(copy数组)中元素比较
for(var i=1;i<arr.length;i++)
{
for(var j=0;j<arrc.length;j++)
{
if(arrc[j]==arr[i])
break;//相等则结束此次的寻找,跳出循环
}
j==arrc.length&&(arrc[arrc.length]=arr[i]);//不相等则赋值给数组最后一个元素
}
return arrc;
}
console.log(f([1,2,2,1,4,5]));
运行结果:[1,2,4,5]
2.利用hash数组解决,利用hash的特点,大大提高效率 ,注意返回是字符类型,可以根据需要转换。
function f1(arr){
//新建一个hash数组
var hash=[];
hash[arr[0]]=1;//初始化hash数组第一个元素
for(i=1;i<arr.length;i++)
{
if(hash[arr[i]]==undefined)
hash[arr[i]]=1; //如果hash数组中arr[i]对应的元素未定义,说明未重复,则将其放入hash数组中
}
//结束遍历之后,取出hash数组
var back=[];
for(back[back.length] in hash);
return back;
}
console.log(f1([1,2,2,1,4,5]));
运行结果:["1","2","4","5"]
关于执行的效率上,特别当数据增多时,hash数组由于不需要去遍历数组查找,所以在执行效率上,将远远高于常规方法。
JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)的更多相关文章
- [Effective JavaScript 笔记]第54条:将undefined看做“没有值”
undefined值很特殊,每当js无法提供具体的值时,就会产生undefined. undefined值场景 未赋值的变量的初始值即为undefined. var x; x;//undefined ...
- Javascript进阶篇——(数组)笔记整理
什么是数组数组是一个值的集合,每个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数值. <script type="text/javascript"& ...
- javascript笔记整理(数组)
数组是一个可以存储一组或是一系列相关数据的容器. 一.为什么要使用数组. a.为了解决大量相关数据的存储和使用的问题. b.模拟真是的世界. 二.如何创建数组 A.通过对象的方式来创建——var a= ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- JavaScript学习笔记之数组(一)
数组基础篇 一.数组概述 1. 数组的语法 数组(array)是按次序排列的一组值.每个值的位置都有编号(从0开始). var arr=[1,2,3] //arr[0]=1 任何类型的数据,都可以放入 ...
- JavaScript笔记02——基本语法(包括函数、对象、数组等)
Doing Math & Logic Conditional & Looping Functions Objects Arrays Doing Math & Logic 1.J ...
- [Effective JavaScript 笔记]第3章:使用函数--个人总结
前言 这一章把平时会用到,但不会深究的知识点,分开细化地讲解了.里面很多内容在高3等基础内容里,也有很多讲到.但由于本身书籍的篇幅较大,很容易忽视对应的小知识点.这章里的许多小提示都很有帮助,特别是在 ...
- 前端开发:Javascript中的数组,常用方法解析
前端开发:Javascript中的数组,常用方法解析 前言 Array是Javascript构成的一个重要的部分,它可以用来存储字符串.对象.函数.Number,它是非常强大的.因此深入了解Array ...
- javascript中关于数组的一些鄙视题
一.判断一个数组中是否有相同的元素 /* * 判断数组中是否有相同的元素的代码 */ // 方案一 function isRepeat1(arrs) { if(arrs.length > 0) ...
随机推荐
- Lua快速入门
-- 两个横线开始单行的注释 --[[ 加上两个[和]表示 多行的注释. --]] ---------------------------------------------------- -- 1. ...
- (转) 实时SLAM的未来及与深度学习的比较
首页 视界智尚 算法技术 每日技术 来打我呀 注册 实时SLAM的未来及与深度学习的比较 The Future of Real-Time SLAM and “Deep Learni ...
- UserDefault的使用,保存小数据到本地-iOS
//保持到本地数据 NSArray *array=@[@"234",@"sdfe"]; NSUserDefaults *userDefault=[NSUserD ...
- HTTP缓存ETAG和Last-Modified
1) 什么是"Last-Modified"? 在浏览器第一次请求某一个URL时,服务器端的返回状态会是200,内容是你请求的资源,同时有一个Last-Modified的属性标记此文 ...
- sql server ,OVER(PARTITION BY)函数用法,开窗函数,over子句,over开窗函数
https://technet.microsoft.com/zh-cn/library/ms189461(v=sql.105).aspx https://social.msdn.microsoft.c ...
- System.Web.HttpContext.Current 跟踪分析
public static HttpContext Current { get { return ContextBase.Current as HttpContext; } set { Context ...
- cocos2dx 2.x 竖屏
1, xcode中General->Device Orientation只勾选Portrait. 2, 修改RootViewController.mm中下面代码: // For ios6.0 a ...
- bing统计【转自CSDN博客】
文章来源:http://blog.csdn.net/aa512690069/article/details/17918799 其原文是微软一个小题目:http://hero.csdn.net/Ques ...
- 【转】DNS劫持和DNS污染的区别
什么是DNS服务器? 简单来说,DNS服务器就是域名管理系统. DNS(Domain Name System)是域名解析服务器的意思. DNS服务器是干什么的? DNS服务器在互联网的作用是:把域名转 ...
- 《中日韩联合开发 - Asianux Server 3》(Asianux Server 3.0)[ISO]
中文名: 中日韩联合开发 - Asianux Server 3英文名: Asianux Server 3.0资源格式: 光盘镜像发行时间: 2007年制作发行: 红旗软件(中国)MiracleLinu ...