使用delete刪除陣列,其長度會改變嗎?

王铁柱6發表於2024-12-07

在 JavaScript 中,使用 delete 運算子刪除陣列元素不會改變陣列的長度。它會在被刪除元素的位置留下一個空洞,用 undefined 表示。

例如:

let arr = [1, 2, 3, 4, 5];
delete arr[2]; // 刪除索引為 2 的元素 (值是 3)
console.log(arr); // 輸出: [1, 2, <1 empty item>, 4, 5]
console.log(arr.length); // 輸出: 5  長度仍然是 5
console.log(arr[2]); // 輸出: undefined

雖然 length 屬性保持不變,但陣列中存在 undefined 會影響一些陣列方法的行為。例如:

  • forEach 會跳過空洞。
  • map 會將空洞對映為 undefined
  • filter 會過濾掉空洞。
  • join 會將空洞轉換為空字串。

如果想要真正刪除元素並改變陣列長度,應該使用以下方法:

  • splice(): 這是最常用的方法。它可以刪除指定位置的元素,並可以插入新元素。
let arr = [1, 2, 3, 4, 5];
arr.splice(2, 1); // 從索引 2 開始刪除 1 個元素
console.log(arr); // 輸出: [1, 2, 4, 5]
console.log(arr.length); // 輸出: 4  長度變為 4
  • filter(): 可以根據條件過濾陣列元素,建立一個新陣列。
let arr = [1, 2, 3, 4, 5];
let newArr = arr.filter((element, index) => index !== 2); // 保留索引不為 2 的元素
console.log(newArr); // 輸出: [1, 2, 4, 5]
console.log(newArr.length); // 輸出: 4  新陣列長度為 4

總而言之,delete 運算子不是刪除陣列元素並縮短陣列長度的最佳方法。 splice() 方法更適合用於此目的。 如果需要根據條件刪除元素,filter() 方法也是一個不錯的選擇。

相關文章