将map函数链接到Array构造函数

时间:2014-05-24 15:08:37

标签: javascript arrays map inline

尝试找到一种方法来内联创建一个给定大小的数据数组,我试过

var n = 4;
var data = (new Array(n)).map(function(x) { return 1 });

给了我

[undefined, undefined, undefined, undefined]

关于那个

new Array(n)

给出

[undefined, undefined, undefined, undefined]

那个

[undefined, undefined, undefined, undefined].map(function(x) { return 1 });

返回

[1, 1, 1, 1]

我希望能够链接Array构造函数和map函数。

有关该行为的任何见解?

1 个答案:

答案 0 :(得分:5)

new Array(n)创建一个大小为n的数组,但其中没有元素。这称为稀疏数组。虽然数组中没有元素,但浏览器将它们表示为undefined。并且Array.prototype.map将忽略尚未定义的数组元素。

引自ECMA 5.1 Specification for Array.prototype.map

  仅对实际存在的数组元素调用

callbackfn ;它不会被称为缺少数组的元素。

为了能够链接map函数,您可能希望这样做

console.log(Array.apply(null, {length: n}).map(function(x) { return 1 }));
# [ 1, 1, 1, 1 ]