为何需要解构Array(3)来生成多维数组?
为什么要解构Array(3)来生成多维数组?
先看两段代码的执行差异:
成功生成多维数组的写法:
[...Array(3)].map(_=>Array(5).fill(0)) /* 输出结果: (3) [Array(5), Array(5), Array(5)] 0 : (5) [0, 0, 0, 0, 0] 1 : (5) [0, 0, 0, 0, 0] 2 : (5) [0, 0, 0, 0, 0] length: 3 */
直接调用map失败的写法:
Array(3).map(_=>Array(5).fill(0)) // 输出结果:(3) [empty × 3]
核心原因
Array(3)创建的是稀疏数组:它仅设置数组的length为3,但未填充任何实际元素,三个位置都是空槽(empty)。map方法会跳过稀疏数组的空槽:它只遍历数组中存在实际值的元素,直接调用Array(3).map时,回调函数根本不会执行,最终返回原稀疏数组结构。- 扩展运算符
[...Array(3)]将稀疏数组转为密集数组:解构过程会遍历每个位置,把空槽替换为undefined,数组拥有三个实际存在的元素后,map方法的回调函数会执行三次,从而生成预期的多维数组。
内容的提问来源于stack exchange,提问作者Akshay Vijay Jain
相关产品推荐
相关产品推荐

