在 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()
方法也是一個不錯的選擇。