作者:为了未来而奋斗2010 | 来源:互联网 | 2022-12-06 23:59
为什么下面的代码中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> ] ]
Madara Uchih..
9
这基本上是您应该避免使用Array构造函数来创建数组的原因.
当传递单个数字n
作为参数时,Array
构造函数将返回一个长度为数组n
但没有元素的数组,也称为稀疏数组.(传递给Array构造函数的任何其他东西,一个字符串,一个对象,两个数字等,将创建一个普通数组,并将传递的参数作为元素按顺序排列).
尝试.map()
覆盖此数组将无法工作,因为其中没有项目,这就是为什么您获得相同的稀疏数组.你.map()
是一个无操作者.
使用[...
(同与Array.from()
通过的方式)上的话,会"实现"阵列转向[ <1 empty item> ]
成[undefined]
和[ <2 empty items> ]
成[undefined, undefined]
,与实际的元件,其值是一个数组undefined
..map()
确实有效,所以你得到了你期望的结果.
简而言之,避免使用Array
构造函数.
1> Madara Uchih..:
这基本上是您应该避免使用Array构造函数来创建数组的原因.
当传递单个数字n
作为参数时,Array
构造函数将返回一个长度为数组n
但没有元素的数组,也称为稀疏数组.(传递给Array构造函数的任何其他东西,一个字符串,一个对象,两个数字等,将创建一个普通数组,并将传递的参数作为元素按顺序排列).
尝试.map()
覆盖此数组将无法工作,因为其中没有项目,这就是为什么您获得相同的稀疏数组.你.map()
是一个无操作者.
使用[...
(同与Array.from()
通过的方式)上的话,会"实现"阵列转向[ <1 empty item> ]
成[undefined]
和[ <2 empty items> ]
成[undefined, undefined]
,与实际的元件,其值是一个数组undefined
..map()
确实有效,所以你得到了你期望的结果.
简而言之,避免使用Array
构造函数.