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数组由于不需要去遍历数组查找,所以在执行效率上,将远远高于常规方法。