MST

星途 面试题库

面试题:JavaScript中稀疏数组的创建及基础性能理解

请简述如何在JavaScript中创建一个稀疏数组,并说明稀疏数组在简单遍历操作时,与密集数组在性能上可能存在哪些差异?
49.7万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

创建稀疏数组

在JavaScript中,可以通过以下方式创建稀疏数组:

  1. 直接初始化:使用数组字面量,通过省略元素值来创建稀疏数组。例如:
let sparseArray = [1, , 3];

这里第二个元素位置为空,即创建了一个稀疏数组。 2. 使用Array()构造函数并指定长度:可以先指定数组长度,然后再选择性地给部分位置赋值,未赋值的位置即为空。

let sparseArray2 = new Array(5);
sparseArray2[0] = 1;
sparseArray2[4] = 5;

性能差异

  1. 简单遍历操作(如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引擎中,对于稀疏数组遍历的优化已经有了很大提升,这种性能差异在多数场景下并不明显。但在一些对性能要求极高且数组规模较大的场景中,仍需要考虑这种差异。