.map在未启动的数组上没有按预期工作

时间:2016-04-18 12:31:15

标签: javascript arrays

在充满未定义值的数组(例如.map())上使用new Array(10)将始终返回具有未定义值的相同长度的数组,无论您返回什么内容。

new Array(10).map(function(){return 5;});

将返回一个填充了10x undefined的新数组。为什么会这样?

Screenshot

4 个答案:

答案 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)

来自the fine manual

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。请查看最高评论以进一步澄清。