js 生成自定義數組


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

構造函數創建數組和字面量定義數組的差異不談,

當我們需要給創建數組賦初始值時,如果量少的話,可以直接通過

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

而當量大而重復的時候,可以通過以下的方式創建:

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]

等同於:

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]

如果需要遞增賦值的話:

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)組合起來形成一個新數組。

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

再看:

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]

也能很輕松的賦值了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM