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

zrz*_*zrz 2 javascript arrays inline map

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

var n = 4;
var data = (new Array(n)).map(function(x) { return 1 });
Run Code Online (Sandbox Code Playgroud)

这给了我

[undefined, undefined, undefined, undefined]
Run Code Online (Sandbox Code Playgroud)

对此

new Array(n)
Run Code Online (Sandbox Code Playgroud)

[undefined, undefined, undefined, undefined]
Run Code Online (Sandbox Code Playgroud)

然后

[undefined, undefined, undefined, undefined].map(function(x) { return 1 });
Run Code Online (Sandbox Code Playgroud)

回报

[1, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

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

对这种行为的任何见解?

the*_*eye 5

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

引用ECMA 5.1规范Array.prototype.map,

callbackfn仅针对实际存在的数组元素调用; 它不会被调用缺少数组的元素.

为了能够链接该map功能,您可能希望这样做

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