面试题答案
一键面试创建稀疏数组
在JavaScript中,可以通过以下方式创建稀疏数组:
- 直接初始化:使用数组字面量,通过省略元素值来创建稀疏数组。例如:
let sparseArray = [1, , 3];
这里第二个元素位置为空,即创建了一个稀疏数组。
2. 使用Array()
构造函数并指定长度:可以先指定数组长度,然后再选择性地给部分位置赋值,未赋值的位置即为空。
let sparseArray2 = new Array(5);
sparseArray2[0] = 1;
sparseArray2[4] = 5;
性能差异
- 简单遍历操作(如
for
循环):- 密集数组:在简单的
for
循环遍历中,由于元素是连续存储的,引擎可以进行更优化的内存访问,遍历性能较好。例如:
- 密集数组:在简单的
let denseArray = [1, 2, 3, 4, 5];
for (let i = 0; i < denseArray.length; i++) {
console.log(denseArray[i]);
}
- 稀疏数组:在遍历稀疏数组时,JavaScript引擎需要额外处理空元素的情况。例如同样使用
for
循环:
let sparseArray = [1, , 3];
for (let i = 0; i < sparseArray.length; i++) {
if (sparseArray.hasOwnProperty(i)) {
console.log(sparseArray[i]);
}
}
如果不使用hasOwnProperty
检查,空元素位置会输出undefined
。这种额外的检查和处理空元素的逻辑,可能会导致在简单遍历操作时,稀疏数组的性能比密集数组略差。不过在现代JavaScript引擎中,对于稀疏数组遍历的优化已经有了很大提升,这种性能差异在多数场景下并不明显。但在一些对性能要求极高且数组规模较大的场景中,仍需要考虑这种差异。