【问题标题】:Difference between Array(n) and [...Array(n)]Array(n) 和 [...Array(n)] 之间的区别
【发布时间】:2019-01-28 11:57:11
【问题描述】:

为什么下面代码中的 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> ] ]

【问题讨论】:

  • 请同时添加想要的结果。
  • .map 不会遍历分散的索引
  • @Rajesh 这可能是 OP 正在寻找的答案。你应该用链接和一切来回答这个问题
  • @Peping 谢谢!我看过一个关于这个的帖子。只是在寻找它
  • 作为替代方案,您可以使用Array.from({length: n}, (_, i) =&gt; ...)

标签: javascript arrays map-function spread-syntax


【解决方案1】:

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

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

尝试.map() 在这个数组上是行不通的,因为其中没有任何项目,这就是你得到相同稀疏数组的原因。您的 .map() 是无操作的。

使用[...(顺便说一下,与Array.from()相同),将“实现”将[ &lt;1 empty item&gt; ]转换为[undefined][ &lt;2 empty items&gt; ]转换为[undefined, undefined]的数组,这是一个包含实际元素的数组,其值为undefined.map() 确实可以解决这个问题,所以你会得到你期望的结果。

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

【讨论】:

  • 数组构造函数是中世纪 JavaScript Ye Olde 时代的遗留物。稀疏数组背后的推理是模糊的。
  • @Veeshoo 要将问题标记为“已解决”,请单击答案分数下方的绿色勾号(这会将答案标记为“已接受”)。我注意到您之前提出的问题没有这样做,如果您可以返回这些问题并接受有助于解决您的问题的答案,那就太好了(它使网站的事情更有条理,奖励回答者,并给你一点额外的声誉!)。不客气,希望你喜欢这个网站! :)
猜你喜欢
  • 2016-05-03
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 2018-08-30
  • 2012-05-21
  • 2016-05-12
相关资源
最近更新 更多