Javascript 数组映射跳过元素
我正在尝试生成一个数组。下面是我遇到问题的一个简化片段:Javascript 数组映射跳过元素,javascript,Javascript,我正在尝试生成一个数组。下面是我遇到问题的一个简化片段: //should return an array with 10 elements with values of 0 var arr = Array(10).map(function() {return 0;}); console.log(arr.length); //returns 10 console.log(arr); //empty array 我知道使用Array(length)返回一个数组,其中length元素被设置为un
//should return an array with 10 elements with values of 0
var arr = Array(10).map(function() {return 0;});
console.log(arr.length); //returns 10
console.log(arr); //empty array
我知道使用Array(length)
返回一个数组,其中length
元素被设置为undefined
。我怀疑.map()
跳过了未定义的元素,但我不是100%确定
我能做些什么来获得预期的结果?我知道我可以用循环完成同样的事情,但如果可能的话,我真的很想使用.map()
--更新--
有人能解释为什么会这样吗
var arr = Array(10).join().split(',').map(function() {return 0;});
-编辑-忽略更新。我找到了它的工作原理。数组。apply
可能会接受一个具有属性长度的对象,并基于该属性,将未定义的长度推到其中
例如:
Array.apply(null, {length: 10});
这也解释了为什么您也可以使用的建议:
Array.apply(null, Array(10));
因为数组(10)
将按预期创建值为10的属性长度。该数组中没有成员。迭代器方法在每次迭代中执行if(在本例中为i)
检查,以确保成员作为自己的或继承的属性实际存在。您可以执行Array.apply(null,Array(10))
强制创建成员。.apply()
方法不关心给定的集合是否有实际成员。@cookiemonster您应该将其添加为答案:)。我保留了一个答案,但收到了2张反对票,所以我会让其他人来处理。(我还在注释中添加了相同的.apply()
解决方案,因为该问题只是关于“为什么”部分。)仅供参考,ECMAScript 6将有一个数组.prototype.fill()
方法,因此您可以执行数组(5).fill(0)
处理零初始化数组。它现在在FireFox中工作。谢谢你的解释