关键词

JavaScript中的稀疏数组与密集数组[译]

JavaScript中的数组可以是密集的,也可以是稀疏的。密集数组即为连续的数组元素,稀疏数组表示有些元素被省略了。本文将详细讲解JavaScript中稀疏数组和密集数组的概念和行为。

什么是稀疏数组?

稀疏数组是指数组元素具有不连续性,或者说中间有空洞的数组。在稀疏数组中,一些元素是不存在的,我们可以用下标访问到的元素即表示存在的,没法访问到的元素则被视为不存在的。

创建稀疏数组

在JavaScript中创建稀疏数组有两种方式:

1.创建一个数组时省略元素:

const sparseArray = new Array(5);
console.log(sparseArray); // [ , , , , ]

上面代码中,我们创建了一个长度为5,但是元素全部为空的稀疏数组。

2.删除数组元素:

const denseArray = [1,2,3,4,5];
delete denseArray[2];
console.log(denseArray); // [1, 2, empty, 4, 5]

上面代码中,我们删除了denseArray数组中下标为2的元素,导致这个位置变成了empty,形成了稀疏数组。

遍历稀疏数组

当我们遍历稀疏数组时,可能会遇到一些问题。因为稀疏数组中没有存放元素的位置是不存在的,所以for循环可能会错过某些元素。我们下面用一个例子来说明这个问题:

const sparseArray = [1, , 2, , 3];

for (let i = 0; i < sparseArray.length; i++) {
  console.log(sparseArray[i]);
}

上面代码输出结果为:

1
undefined
2
undefined
3

我们发现用for循环遍历稀疏数组,打印出来的结果存在undefined,表示当前位置虽然是存在的,但并没有被赋值。

因为稀疏数组的存在形式是不连续的,会导致一些遍历行为不同于密集数组。

什么是密集数组?

密集数组表示数组元素是连续存在的。在JavaScript中,大多数情况下,数组是密集数组。

比如,创建一个初始元素全部为0的长度为5的数组:

const denseArray = new Array(5).fill(0);
console.log(denseArray); // [0, 0, 0, 0, 0]

遍历密集数组

如果遍历密集数组,那么for循环的行为和普通数组相同。下面用一个示例来说明:

const denseArray = [1, 2, 3, 4, 5];

for (let i = 0; i < denseArray.length; i++) {
  console.log(denseArray[i]);
}

上面代码输出结果为:

1
2
3
4
5

我们发现用for循环遍历密集数组,打印出来的结果没有undefined,数组元素都存在且是顺序排列的。

总结

本篇文章对JavaScript中的稀疏数组和密集数组进行了详细阐述,给出了它们的定义和创建方式,并给出了不同遍历数组的行为。需要注意的是,稀疏数组和密集数组虽然在JavaScript中看起来不同,但实际上都可以用一些常见的数组方法进行操作。

本文链接:http://task.lmcjl.com/news/9305.html

展开阅读全文