Skip to content

判断是否为稀疏数组

Published:

什么是稀疏数组

我们通常使用的数组都是“满坑满谷”的,也就是说数组中的每一个下标都有对应的值。例如:

const arr = [2, 3, 4, 5, 6];

在这个数组中,所有的元素从第一个到最后一个都有定义。然而,有时候我们可能会遇到数组中的某些元素缺失了,没有被定义。这种情况下,我们称这个数组为稀疏数组。稀疏数组中的某些项是空的,不是 undefined,而是什么也没有。在控制台打印稀疏数组时会看到如下情况:

const arr = [2, , , 51, 2];

console.log(arr.length); // 5
console.log(arr); // [2, empty item, empty item, 51, 2]

**稀疏数组的特点它并不是没有值的地方是 undefined,而是这个地方啥也没有。**这种稀疏数组的某一些遍历函数,会将缺失的值的项跳过:

const arr = [2, , , 51, 2, , ,];
arr.forEach((item, index) => {
  console.log(item, index);
});

本来数组的长度是7,但是它只打印了3次,这就是稀疏数组的一个特点,数组项的总数和数组长度不一致。

如何判断

function isSparseArray(arr) {
  if (!Array.isArray(arr)) {
    return false;
  }

  // 根据稀疏数组的特点,当 某个索引在数组中不存在时,直接返回 true
  for (let i = 0; i < arr.length; i++) {
    if (!(i in arr)) {
      return true;
    }
  }
  return false;
}

const arr = [2, , , 51, 2, ,];
console.log(isSparseArray(arr));