尝试找到一种方法来内联创建一个给定大小的数据数组,我试过
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函数。
有关该行为的任何见解?
答案 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 ]