我试图生成一个数组。这是我遇到问题的简化摘录:
//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()
正在跳过undefined
个元素,但我不是100%肯定它。
我可以做些什么来获得预期的结果?我知道我可以通过循环完成同样的事情,但如果可能,我真的想使用.map()
。
- 更新 -
任何人都可以解释为什么会这样吗?
var arr = Array(10).join().split(',').map(function() {return 0;});
-edit-忽略更新。我弄清楚它为什么会起作用。
答案 0 :(得分:0)
Array.apply
可以接受一个可以具有属性长度并基于它的对象,在其中推送undefined
个长度。
例如:
Array.apply(null, {length: 10});
这解释了为什么你也可以使用cookie monster的建议:
Array.apply(null, Array(10));
因为Array(10)
将按预期创建值为10的属性长度。