簡介
陣列、初始化、快速生成陣列、記憶體洩露
有時候會需要對陣列進行一些初始化,最常用到的便是 for 迴圈:
let num = [];
for (let i = 0; i < 10; i++) {
// 做一些其他操作
// 或者返回一些值
num[i] = i;
}
複製程式碼
其實有一些簡單好用的小技巧可以幫助我們優雅的初始化陣列:
Array.from
在支援 ES6 的時候可以利用 Array.from()
來初始化陣列:
Array.from({ length: 10 }, (val, index) => {
// 做一些其他操作
// 或者返回一些值
return index;
})
Array.from(new Array(10), (val, index)=> {
// 做一些其他操作
// 或者返回一些值
return index;
});
複製程式碼
Array.apply
在不支援 ES6 的時候可以利用 Array.apply()
來初始化陣列:
Array.apply(null, {length: 10}).map(Function.call, (index, arr) => {
// 做一些其他操作
// 或者返回一些值
return index;
});
const num = Array.apply(null, {length: 5}).map(Function.call, Number);
// 輸出 [0, 1, 2, 3, 4]
console.log(num)
複製程式碼
spread
當需要快速建立類似 [0, 1, 2, ...N] 這種陣列時可以:
const num = [...Array(5).keys()];
// 輸出 [0, 1, 2, 3, 4]
console.log(num)
複製程式碼
Array.fill
利用 new Array 配合 Array.fill 可以快速生成 [0, 0, 0, 0, ...] 這種陣列:
const num = (new Array(5)).fill(0)
// 輸出: [0, 0, 0, 0, 0]
console.log(num)
複製程式碼
清空陣列
除了初始化新的陣列,對已有的陣列進行清空操作也算半個初始化
。如果直接對變數賦予新值 list=[]
雖然說以前清空了陣列,但是舊值還放在記憶體之中,沒被垃圾回收機制自動回收的話算是 記憶體洩露
了:
let first = [1,2,3];
let second = first;
// 清空
first = [];
// 輸出 []
console.log(first);
// 輸出 [1, 2, 3]
console.log(second);
複製程式碼
不再用到的記憶體,沒有及時釋放,就叫做記憶體洩漏。
也可以利用 list.length = 0
來進行操作可以銷燬掉陣列裡的所有內容,也將影響到其他引用。例子:
let first = [1,2,3];
let second = first;
// 清空
first.length = 0;
// 輸出 []
console.log(first);
// 輸出 []
console.log(second);
複製程式碼
一起成長
在困惑的城市裡總少不了並肩同行的
夥伴
讓我們一起成長。
- 如果您想讓更多人看到文章可以點個
點贊
。 - 如果您想激勵小二可以到 Github 給個
小星星
。 - 如果您想與小二更多交流新增微信
m353839115
。
本文原稿來自 PushMeTop