面试题答案
一键面试遍历稀疏数组遇到的特殊情况
- 跳过空位:JavaScript 中,使用
for...of
、for...in
以及数组的迭代方法(如forEach
、map
等)在遍历稀疏数组时会跳过空位。例如:
let sparseArray = [1, , 3];
for (let value of sparseArray) {
console.log(value);
}
// 输出: 1 3
- 索引不连续:稀疏数组的索引是不连续的,在使用
for
循环按照索引遍历的时候,需要额外处理不存在的索引位置。
优化遍历以提高性能的方法
- 使用
for
循环并手动检查索引:
let sparseArray = [1, , 3];
for (let i = 0; i < sparseArray.length; i++) {
if (sparseArray.hasOwnProperty(i)) {
console.log(sparseArray[i]);
}
}
// 输出: 1 3
这里通过 hasOwnProperty
方法来确保只处理数组中真正存在的元素,避免因跳过空位而遗漏逻辑处理。
- 将稀疏数组转换为密集数组:如果性能瓶颈主要在遍历上,可先将稀疏数组转换为密集数组。例如:
let sparseArray = [1, , 3];
let denseArray = Array.from(sparseArray);
denseArray.forEach(value => console.log(value));
// 输出: 1 undefined 3
Array.from
会将稀疏数组转换为密集数组,这样在使用迭代方法遍历的时候就不会跳过空位。但这种方法会占用更多内存,如果数组非常大可能不太适用。