每日 30 秒 ⏱ 優雅初始化陣列

zhangxiangliang發表於2019-03-31

簡介

? 更新平臺多偶爾會漏掉,如果覺得文章還行點個 star 防走失。

? 一天 30 秒 ⏱ 一段程式碼 ✍️ 一個場景 ? ?

有時候會需要對陣列進行一些初始化,最常用到的便是 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)
複製程式碼

清空陣列

除了初始化新的陣列,對已有的陣列進行清空操作也算半個初始化。如果直接對變數賦予新值 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);

// 輸出 [1, 2, 3]
console.log(second);
複製程式碼

一起成長

如果您感覺有收穫可以點贊關注激勵我,也歡迎到 Github 加個 star。

微信公眾號

本文原稿來自 PushMeTop

相關文章