首页 > 代码库 > JavaScript笔记之数组 keyword(存储和释放&堆栈 & 按值 引用)

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(存储和释放&堆栈 & 按值 引用)