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

Vee*_*hoo 8 javascript arrays spread-syntax map-function

为什么下面的代码中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> ] ]
Run Code Online (Sandbox Code Playgroud)

Mad*_*iha 9

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

当传递单个数字n作为参数时,Array构造函数将返回一个长度为数组n但没有元素的数组,也称为稀疏数组.(传递给Array构造函数的任何其他东西,一个字符串,一个对象,两个数字等,将创建一个普通数组,并将传递的参数作为元素按顺序排列).

尝试.map()覆盖此数组将无法工作,因为其中没有项目,这就是为什么您获得相同的稀疏数组.你.map()是一个无操作者.

使用[...(同与Array.from()通过的方式)上的话,会"实现"阵列转向[ <1 empty item> ][undefined][ <2 empty items> ][undefined, undefined],与实际的元件,其值是一个数组undefined..map() 确实有效,所以你得到了你期望的结果.

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