2014-05-24 63 views
2

試圖找到一種方法,內聯鑑於其規模數據陣列的創作,我想鏈接地圖功能,Array構造

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] 

我希望能夠鏈數組構造和地圖功能。

對此行爲的任何見解?

回答

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 ] 
+0

謝謝!我還注意到,瀏覽器表示實際上是不同的(Chrome):new Array(2)返回[undefined x2] not [undefined,undefined] – zrz