稀疏数组与密集数组

稀疏数组

稀疏数组:索引不连续,数组长度大于元素个数的数组, 可以简单理解为有empty的数组,类似于empty元素代表这个位置没有初始化,

 let arr1 = new Array(5);
      console.log(arr1);
      let arr = [1, 3, , ,];
      console.log(arr);

empty与undefined

empty代表数组连这个索引都没有初始化,undefined是代表索引初始化了,只是存入的值是undefined

判断稀疏数组元素

通过in

 let arr1 = [1, 3, , , , 45];
    console.log(arr1, "arr1");
    let len = arr1.length >>> 0;
    let A = new Array(len);
    for (let i = 0; i < len; i++) {
//判断原型是否有 i
      if (i in arr1) {
        console.log(arr1[i]);
      }
    }

所以稀疏数组在大多数遍历数组的方法中,遇到「empty」元素的时候,callback 函数是不会执行的,如:map等
具体的实现就是通过in判断的

所以在很多在自己实现map等遍历方法的时候都需要加一句 if (k in O)来排除empty元素

密集数组

密集数组:索引连续, 数组长度等于元素个数的数组

  let arr = [1, 3, 4, 5, 2];
      console.log(arr);

原文地址:https://www.cnblogs.com/heihei-haha/p/14900757.html