稀疏数组

217 阅读1分钟

链接

  • 稀疏数组:数组中的元素之间可以有空隙。

  • 一般来说,js中的数组是稀疏的

稀疏数组

    遍历:
    ary.forEach((item)=>{
    	console.log(item);
    })//什么也输不出
    
    let ary1 = ary.concat(1,2);
    ary1.forEach((item)=>{
    	console.log(item);
    })//只能输出1,2
  • 遍历时,forEach直接跳过了前面的"缝隙"
    for(let i = 0;i < ary1.length;i++){
    	console.log(ary1[i]);
    }//输出undefined,undefined,undefined,1,2
  • 只有用最原始的for循环(不是for in)才能输出前面3个undefined,剩下的使用Array的方法均会跳过“缝隙”

  • 这种情况也会生成稀疏数组:

    var arr = [];
    arr[0] = 0;
    arr[100] = 100;
    arr;//[0, empty × 99, 100]
  • 数组元素只有两个但长度为101

密集数组

  • 创建密集数组的技巧:
    var a = Array.apply(null,Array(3));
    a//[undefined, undefined, undefined]
  • 实际上,JavaScript并没有常规的数组,所有的数组其实就是个对象,只不过会自动管理一些"数字"属性和length属性罢了。

  • 说的更直接一点,JavaScript中的数组根本没有索引,因为索引应该是数字,而JavaScript中数组的索引其实是字符串:arr[1]其实就是arr["1"],给arr["1000"]=1,arr.length也会自动变为1001。

  • 这些表现的根本原因就是:JavaScript中的对象就是字符串到任意值的键值对。注意键只能是字符串。不过目前,ES6中已经有了类似于Java等语言的Map类型,键可以是任意类型的值。