JavaScriptの配列から特定の要素を削除する方法を徹底解説
JavaScriptでプログラミングをしていると、数値が格納された配列から特定の要素だけを削除したい場面によく出くわします。例えば、次のような配列から「5」という値をすべて取り除きたい場合などです。
const arr = [2, 5, 9, 1, 5, 8, 5];
この記事では、フレームワークに頼らず、素のJavaScript(コアJavaScript)だけで実装する方法を解説します。目標は、以下のように直感的に呼び出せるメソッドを作ることです。
array.remove(値);
splice()を使った削除メソッドの実装
配列から要素を削除する際に便利なのが、Arrayオブジェクトが標準で持つ splice() メソッドです。これを活用し、指定した値と一致する要素をすべて削除する関数を作成してみましょう。
サンプルコード
const arr = [2, 5, 9, 1, 5, 8, 5];
const removeInstances = function(el){
const { length } = this;
for(let i = 0; i < this.length; ){
if(el !== this[i]){
i++;
continue;
} else {
this.splice(i, 1);
};
};
// 要素が1つでも削除されればtrue、なければfalseを返す
if(this.length !== length){
return true;
};
return false;
};
Array.prototype.removeInstances = removeInstances;
console.log(arr.removeInstances(5));
console.log(arr);
コードのポイント解説
このコードの動作を順番に見ていきましょう。
- 初期の長さを記録:
const { length } = this;で処理前の配列の長さを保存しておきます。 - ループ内でのインデックス制御: 値が一致しない場合は
i++でインデックスを進めますが、一致してsplice()で削除した場合はインデックスを進めません。これは、削除によって後続の要素が前に詰められるためです。ここがバグを防ぐ重要なポイントです。 - 戻り値の設計: 処理後に配列の長さが変わっていれば少なくとも1つの要素が削除されたことを意味するので
trueを返し、変更がなければfalseを返します。 - プロトタイプへの追加:
Array.prototypeに登録することで、すべての配列からメソッドとして呼び出せるようになります。
実行結果
コンソールに出力される結果は以下の通りです。
true [ 2, 9, 1, 8 ]
「5」に該当する要素が3つすべて削除され、残りの要素 [2, 9, 1, 8] だけが配列に残っていることが確認できます。
補足:よりシンプルな代替手法
元の配列を書き換えたくない場合は、ES2015以降で使える filter() メソッドを使うのもおすすめです。
const result = arr.filter(item => item !== 5); console.log(result); // [ 2, 9, 1, 8 ]
filter() は新しい配列を返すため、副作用がなく安全に扱えます。用途に応じて、元の配列を直接変更する splice() 方式と、イミュータブルな filter() 方式を使い分けるとよいでしょう。
-
Swiftの配列から特定の要素を削除する方法を徹底解説
Swiftで配列から特定の要素を削除したい場合、いくつかの方法があります。この記事では、実際のコード例を交えながら、代表的な2つの方法をわかりやすく解説します。 まずは、String型の配列を用意しましょう。 var arrayOfString = [a,b,c,f] この配列を使って、以下の2つの方法で特定の要素を削除していきます。 方法1:filterメソッドを使う Swiftの配列にはfilterメソッドが標準で用意されています。これは、指定した条件に基づいて要素を絞り込み、新しい配列として返すメソッドです。削除したい要素を条件から除外することで、実質的にその要素を取り除くことができます
-
MongoDBで配列から特定の要素を削除する方法($pull演算子の使い方)
MongoDBの配列から特定の要素を削除したい場合は、$pull 演算子を使用します。この記事では、実際のコレクションを作成しながら、$pull を使った要素の削除手順を具体的に解説します。1. サンプルコレクションの作成まず、insertOne() メソッドを使って、名前のリストを持つドキュメントを含むコレクションを作成しましょう。> db.demo125.insertOne({ListOfNames:[John,Chris,Bob,David,Carol]}); { acknowledged : true, insertedId : ObjectId(5e2f304068