配列要素の削除時の注意点 | delete演算子 | JavaScript 超完全入門 基本から発展までのすべて

スポンサーリンク
スポンサーリンク

delete演算子を使った配列要素の削除

JavaScriptでは、delete演算子を使って配列の要素を削除することが可能ですが、注意点があります。delete演算子は、オブジェクトのプロパティを削除するように、配列の要素も削除できますが、その要素自体を配列から取り除くわけではなく、削除された位置にundefinedが残ります

let numbers = [1, 2, 3, 4];

delete numbers[2];  // 3番目の要素を削除

console.log(numbers);  // [1, 2, undefined, 4]

この例では、配列の3番目の要素がdeleteされましたが、その位置にはundefinedが残っているため、配列の長さには変化がありません。

配列の要素を完全に削除するには?

配列の要素を完全に削除して、配列の長さも調整したい場合は、delete演算子ではなくArray.prototype.splice()メソッドを使います。splice()メソッドは、配列から特定の要素を削除し、他の要素を詰めることができます。

let numbers = [1, 2, 3, 4];

numbers.splice(2, 1);  // 3番目の要素を削除

console.log(numbers);  // [1, 2, 4]

この例では、splice()メソッドを使って3番目の要素(3)を削除しています。削除後、他の要素が前に詰められるため、undefinedが残ることはありません。

delete演算子の使用時に注意すべき点

delete演算子を使用する際には、配列の要素がundefinedになっても、配列の長さ(length)には影響を与えないことを理解しておく必要があります。これにより、ループ処理や要素の存在確認に問題が生じることがあります。

let numbers = [1, 2, 3, 4];

delete numbers[2];  // 3番目の要素を削除

for (let i = 0; i < numbers.length; i++) {
    console.log(numbers[i]);  // [1, 2, undefined, 4]
}

この例では、delete演算子を使用してもnumbers.lengthは変わらないため、undefinedの要素もループで処理されます。これは意図しない結果を招く可能性があるため、配列の操作にはsplice()などのメソッドを使用する方が適切です。

配列の最後の要素を削除する場合

配列の最後の要素を削除する場合は、Array.prototype.pop()メソッドを使うとシンプルに削除できます。pop()メソッドは、配列の最後の要素を取り除き、その値を返します。

let fruits = ["apple", "banana", "cherry"];

let lastFruit = fruits.pop();  // 最後の要素を削除

console.log(fruits);  // ["apple", "banana"]
console.log(lastFruit);  // "cherry"

この例では、pop()メソッドを使用して最後の要素を削除しています。このメソッドは、配列の長さを自動的に調整し、削除した要素を返します。

配列の特定範囲を削除する場合

配列の特定範囲を削除したい場合もsplice()メソッドが役立ちます。splice()メソッドは、開始位置と削除する要素の数を指定することで、その範囲を削除します。

let numbers = [1, 2, 3, 4, 5, 6];

numbers.splice(2, 3);  // 3番目から3つの要素を削除

console.log(numbers);  // [1, 2, 6]

この例では、配列の3番目の要素から3つの要素(3, 4, 5)が削除され、配列は[1, 2, 6]となります。

まとめ

JavaScriptで配列の要素を削除する際にdelete演算子を使用すると、削除した位置にundefinedが残り、配列の長さには影響を与えません。配列の要素を完全に削除して詰める必要がある場合は、splice()pop()メソッドを使用するのが適切です。配列操作時には、delete演算子の特性を理解し、意図した結果を得られる方法を選びましょう。