Array(n) 和 [...Array(n)] 之间的区别

Difference between Array(n) and [...Array(n)]

为什么下面代码中的 map() 输出不同?

var y = [1,2,2,1];

var t = y.map(ind => [...Array(ind)].map((_,i) => ind+""+i));
// This makes [ [ '10' ], [ '20', '21' ], [ '20', '21' ], [ '10' ] ]

var t1 = y.map(ind => Array(ind).map((_,i) => ind+""+i));
//[ [ <1 empty item> ], [ <2 empty items> ], [ <2 empty items> ], [ <1 empty item> ] ]

这基本上就是您应该避免使用 Array 构造函数创建数组的原因。

当传递单个数字 n 作为参数时,Array 构造函数将 return 一个长度为 n 但没有元素的数组,也称为稀疏数组。 (传递给 Array 构造函数的任何其他内容,一个字符串、一个对象、两个数字等,将创建一个普通数组,其中传递的参数按顺序作为元素)。

尝试 .map() 遍历这个数组是行不通的,因为里面没有任何项目,这就是为什么你会得到相同的稀疏数组。您的 .map() 是空操作。

在其上使用[...(与Array.from()相同),"realize"数组会将[ <1 empty item> ]变为[undefined][ <2 empty items> ] 转换为 [undefined, undefined],一个包含实际元素的数组,其值为 undefined.map()是否在这方面工作,所以你会得到你期望的结果。

简而言之,避免使用 Array 构造函数。