面试题答案
一键面试特性
- 存在空洞:稀疏数组是包含从0开始的不连续索引的数组,其中某些位置没有值,形成空洞。与密集数组每个索引都有对应值不同。
- length属性:稀疏数组的
length
属性会反映数组中最高索引值加1,即使中间有空洞。例如,创建let arr = []; arr[100] = 42;
,arr.length
为101,尽管0到99索引位置没有值。 - 迭代行为:在使用普通
for
循环迭代稀疏数组时,空洞位置会被跳过。而使用for...of
或forEach
等方法时,空洞位置会以undefined
的形式出现。
创建方式
- 直接初始化:
let sparseArray = [];
sparseArray[10] = 'value';
这里数组从索引0到9都是空洞,索引10有值。
2. 使用Array.from
方法:
let sparseArray = Array.from({ length: 5 }, (_, i) => i === 2? 'value' : undefined);
// 数组长度为5,索引2位置有值'value',其他位置为undefined
实际应用场景
在游戏开发中,地图可以用稀疏数组表示。例如一个大型二维地图,大部分区域是空旷的(无对象),只有少数位置有游戏元素(如建筑物、角色等)。使用稀疏数组可以节省内存,只在有实际元素的位置存储数据,而不是为整个地图的每个位置都分配空间。