在充满未定义值的数组(例如.map()
)上使用new Array(10)
将始终返回具有未定义值的相同长度的数组,无论您返回什么内容。
new Array(10).map(function(){return 5;});
将返回一个填充了10x undefined的新数组。为什么会这样?
答案 0 :(得分:4)
因为当您定义这样的数组时,值的空格是空插槽,并且不会被map()
或其任何朋友迭代。
Array.prototype.fill()
(在ES6中)可用于设置该数组的值。
答案 1 :(得分:3)
您可以使用
var array = Array.apply(null, { length: 10 }).map(function(){ return 5; });
var array = Array.apply(null, { length: 10 }).map(function() { return 5; });
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');
答案 2 :(得分:2)
map按顺序为数组中的每个元素调用一次提供的回调函数,并从结果中构造一个新数组。仅对已分配值的数组的索引(包括undefined)调用回调。 没有调用缺少的数组元素(即,从未设置过的索引,已删除的索引或从未赋值的索引)。
new Array(10)
如果有意义的话,会创建缺少的元素。
喜欢这个:
var b=new Array();
b[30] = 1;
var c = b.map(function(){return 5;});
> [undefined × 30, 5]
答案 3 :(得分:1)
这里有一个答案:https://stackoverflow.com/a/5501711/6206601。请查看最高评论以进一步澄清。