JavaScript - 当我创建一个空项数组时,我无法使用map函数

5

我尝试了这个


> Array(3)
[ <3 empty items> ]
> // and this joins up all the nothings
> Array(3).join('-')
'--'
> // but...
> Array(3).map((x) => 'a')
[ <3 empty items> ]
> // map doesn't work with the array of empty items!

我以为我的结果会跟这个一样

> [undefined, undefined, undefined].map((x) => 'a')
[ 'a', 'a', 'a' ]

那是怎么了?


4
.map() 方法(以及类似的其他方法)会跳过未初始化的数组位置。 - Pointy
1
尝试运行 Array(3).fill(null).map(x => 'a') - Pointy
1
谢谢 - 我甚至都不知道如何“搜索”这个! - Alex028502
是的,所以可以通过遍历所有索引并请求值来实现加入,而 map 则不是这样。 - Alex028502
显示剩余2条评论
2个回答

4

您可以使用:

Array(3).fill(null).map(x => 'a')

3
在第一种情况下,您创建了一个具有未定义指针的数组。
Array(3)

第二个创建了一个数组,其中包含指向3个未定义对象的指针,在这种情况下,指针本身不是未定义的,只有它们所指向的对象是未定义的。

[undefined, undefined, undefined]

当我们比较这两种情况时,它看起来是这样的

//first case look like this 
[undefined, undefined, undefined]
//the second look like this 
 Array(3) [,,,];

map函数会按顺序为数组中的每个元素调用一次提供的回调函数,并从结果构造一个新数组。callback仅对已分配值的数组索引调用;它不对已删除或从未分配值的索引调用。在第一种情况下,数组值没有明确分配值,而在第二个示例中,即使是undefined值也被分配了 link

以你的示例为例,你必须这样做

Array(3).fill(undefined).map(x => 'a')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接