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
构造函数。
为什么下面代码中的 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
构造函数。