js Array 建立具備自定義初始值的數組

在原生js中,建立數組的常見方式有兩種:Array() 或 new Array() 和 [] 方式.數組

構造函數建立數組和字面量定義數組的差別不談,app

當咱們須要給建立數組賦初始值時,若是量少的話,能夠直接經過函數

let arr = [2,4] 的方式建立;spa

而當量大而重複的時候,能夠經過如下的方式建立:code

Array.apply(null,{length:20}).map(()=>2) 索引

//(20) [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]ip

等同於:get

Array.apply(null,Array(20)).map(()=>2)
//(20) [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]class

若是須要遞增賦值的話:構造函數

Array.apply(null,{length:20}).map((v,i)=>i)
(20) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

以上的語法也能夠寫成:

Array(...Array(20)).map((v,i)=>i)
(20) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

可能有人會疑惑,爲何要Array(...Array(20))這麼麻煩的來建立數組呢,直接Array(20)再經過map()來賦值不能夠嗎?

這是由於直接經過Array(20)的方式建立的數組,只有長度沒有索引值,

Array(20)
(20) [empty × 20]

Array(20)[2]   //undefined

2 in Array(20)   //false

map ()方法會給原數組中的每一個元素都按順序調用一次  callback 函數。callback 每次執行後的返回值(包括 undefined)組合起來造成一個新數組。

<strong>callback 函數只會在有值的索引上被調用;那些歷來沒被賦過值或者使用 delete 刪除的索引則不會被調用。</strong>

再看:

Array(...Array(20))
(20) [undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined]

2 in Array(...Array(20))   //true

因此就能夠調用map()方法了

另外,直接經過

Array(20).fill(2)
(20) [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2]

也能很輕鬆的賦值了

相關文章
相關標籤/搜索