JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでIDを指定してJSONオブジェクトの配列から要素を削除する方法

はじめに

JavaScriptでは、JSON形式のオブジェクトが格納された配列から、特定のIDに一致する要素を検索して削除したいケースがよくあります。例えば、以下のような映画情報を含むオブジェクトの配列を考えてみましょう。

const arr = [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
];

ここで求められるのは、第1引数にこのような配列を受け取り、第2引数にID文字列を受け取るJavaScript関数です。関数はそのIDでオブジェクトを検索し、配列内に該当するオブジェクトが存在すれば、それを配列から取り除く必要があります。

実装のポイント

この処理を実現するには、Array.prototype.findIndex()メソッドで対象オブジェクトのインデックス位置を特定し、Array.prototype.splice()メソッドでその要素を削除するのが定石です。なお、IDは数値で渡される場合も考慮し、String()で文字列に変換して比較すると安全です。

サンプルコード

実際のコードは以下のようになります。

const arr = [
    {id: "1", name: "Snatch", type: "crime"},
    {id: "2", name: "Witches of Eastwick", type: "comedy"},
    {id: "3", name: "X-Men", type: "action"},
    {id: "4", name: "Ordinary People", type: "drama"},
    {id: "5", name: "Billy Elliot", type: "drama"},
    {id: "6", name: "Toy Story", type: "children"}
];
const removeById = (arr, id) => {
    const requiredIndex = arr.findIndex(el => {
        return el.id === String(id);
    });
    if(requiredIndex === -1){
        return false;
    };
    return !!arr.splice(requiredIndex, 1);
};
removeById(arr, 5);
console.log(arr);

コードの解説

  • findIndex(): 各要素に対してコールバックを実行し、条件(el.id === String(id))を満たす最初の要素のインデックスを返します。見つからない場合は -1 を返します。
  • splice(requiredIndex, 1): 特定したインデックスの位置から1件だけ要素を削除し、元の配列を直接変更します。
  • 戻り値: 対象が見つからなければ false を、正常に削除できれば true を返すため、呼び出し側で成否を判定できます。

実行結果

上記のコードを実行すると、コンソールには以下のように出力されます。

[
    { id: '1', name: 'Snatch', type: 'crime' },
    { id: '2', name: 'Witches of Eastwick', type: 'comedy' },
    { id: '3', name: 'X-Men', type: 'action' },
    { id: '4', name: 'Ordinary People', type: 'drama' },
    { id: '6', name: 'Toy Story', type: 'children' }
]

IDが「5」の「Billy Elliot」が配列から正しく削除されていることが確認できます。

補足:元の配列を変更したくない場合

splice()は元の配列を破壊的に変更します。元の配列を保持したい場合は、filter()メソッドを使って新しい配列を生成する方法も有効です。

const filteredArr = arr.filter(el => el.id !== String(5));

このように、用途に応じてsplice()とfilter()を使い分けることで、柔軟かつ安全に配列操作を行えます。

  1. JavaScriptで配列から値を指定して要素を削除する方法

    JavaScriptで配列から特定の値を持つ要素を削除するには、まずindexOf()メソッドでその値のインデックス(位置)を取得し、次にsplice()メソッドを使って該当する要素を取り除きます。 削除の基本的な手順 indexOf()で削除したい値のインデックスを取得する インデックスが見つかった場合(-1より大きい場合)、splice(index, 1)でその位置の要素を1つ削除する サンプルコード 以下のコードを実行して、実際の動作を確認してみましょう。 <html> <body> <script> var array = [10, 30, 40

  2. JavaScriptで配列内オブジェクトのプロパティ名を置き換える方法

    JavaScriptでオブジェクト配列のプロパティ名を置き換える方法 JavaScriptでは、map()メソッドを活用することで、配列に含まれる各オブジェクトのプロパティ名を別の名前に簡単に置き換えることができます。map()は元の配列を変更せずに新しい配列を生成するため、安全かつ効率的なデータ変換処理に適しています。 以下は、オブジェクト配列のプロパティ名 name を fullName に置き換えるサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta