清空 Array 也是實務上常遇到功能,ECMAScript 並沒有自帶 clear()
Method,必須使用其他方式完成。
Version
macOS Catalina 10.15.1
VS Code 1.40.2
Quokka 1.0.262
ECMAScript 2015
Empty Array
let arr1 = [1, 2, 3]
let arr2 = arr1
arr1 = []
arr1 // ?
arr2 // ?
直覺會使用 []
,但別忘了 variable 只是存 array 的 reference,因此指定 []
實際上並不是清空原本 array,只是將一個全新 empty array 的 reference 存進 variable,因此若有其他 variable 仍參考原本 array,還是會得到尚未清空的 array。
Length Property
let arr1 = [1, 2, 3]
let arr2 = arr1
arr1.length = 0
arr1 // ?
arr2 // ?
若直接將 length
property 設定為 0
,會真的將原本 array 清空,而不是指定另一個 empty array 的 reference。
Splice()
let arr1 = [1, 2, 3]
let arr2 = arr1
arr1.splice(0, arr1.length)
arr1 // ?
arr2 // ?
由於 Array.prototype.splice()
是 destructive,因此也可從 index 0
開始,刪除 arr.length
長度,相當於清空 array。
Pop() || Shift()
let arr1 = [1, 2, 3]
let arr2 = arr1
while(arr1.length) arr1.pop()
arr1 // ?
arr2 // ?
另外一個看似很蠢的作法,就是 while()
配合 pop()
,也能將 array 清空。
let arr1 = [1, 2, 3]
let arr2 = arr1
while(arr1.length) arr1.shift()
arr1 // ?
arr2 // ?
既然能使用 pop()
,當然也能使用 shift()
。
Conclusion
- 若 array 不大,直接將
length
property 設定為0
是最簡單方式 - 若 array 較大,則使用
while()
+pop()
是速度最快方式
Reference
Colquitt, How to Remove Elements From a JavaScript Array Safely