【问题标题】:Why can't I map new Array(3) into an array of new values? [duplicate]为什么我不能将 new Array(3) 映射到新值数组中? [复制]
【发布时间】:2015-07-31 04:06:10
【问题描述】:

我想了解这背后的原因

var a = new Array(3);
var b = a.map(function () {
  return 'b';
});

结果

一个:[ , , ]

b:[ , , ]

当我期望 b 产生['b', 'b', 'b']时。


在进一步调查中,我发现如果我要做a.push('a'),我会选择[, , , 'a']

在 map 函数之后,b 将变为 [, , , 'b']

这里发生了什么?为什么这些分配的单元格的行为与初始化不同?我最初期望它会像数组文字一样起作用,[undefined, undefined, undefined].map(fn)

【问题讨论】:

  • 我假设你的意思是 return 'x' 在你的函数 b?
  • javascript map 函数总是返回仅在迭代数组值中的值。您的数组“a”的长度为 3。所以它返回相同

标签: javascript arrays


【解决方案1】:

Array.map() 不会为未定义值的索引调用回调。

来自 MDN 文档:

map 为每个元素调用一次提供的回调函数 数组,按顺序排列,并根据结果构造一个新数组。打回来 仅对具有赋值的数组索引调用; 未定义的索引不会调用它,那些有 被删除或从未被赋值。

【讨论】:

  • 好的 ole 稀疏数组。直到!
  • 老实说,在看到您的问题和 TIL 后,我查看了文档! ;-)
  • 哈哈真棒@techfoobar。如果我也这样做了;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-02
  • 2021-09-26
  • 2019-04-16
  • 2016-08-30
  • 1970-01-01
  • 2020-04-07
  • 2014-01-22
相关资源
最近更新 更多