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

zhangxiangliang發表於2019-03-31

簡介

陣列、初始化、快速生成陣列、記憶體洩露

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

相關文章