JavaScriptでオブジェクトの配列をフィルタリングする方法
JavaScriptでは、数値や文字列などのリテラル値の配列と、オブジェクトが格納された配列を組み合わせてデータを扱う場面がよくあります。ここでは、リテラル値の配列に含まれる値を持つオブジェクトだけを抽出するフィルタリング処理の実装方法を解説します。
前提となるデータ構造
まず、次のような2つの配列を用意します。1つはリテラル値の配列、もう1つは「city」キーを持つオブジェクトの配列です。
const source = [1, 2, 3, 4, 5];
const cities = [{ city: 4 }, { city: 6 }, { city: 8 }];この例では、source 配列に含まれている値と一致する city プロパティを持つオブジェクトだけを、新しい配列として取り出すことが目的です。
filterメソッドを使った実装例
配列のフィルタリングには Array.prototype.filter() メソッドが便利です。さらに、特定の値が配列に存在するかどうかを判定するために includes() メソッドを組み合わせます。
const source = [1, 2, 3, 4, 5];
const cities = [{ city: 4 }, { city: 6 }, { city: 8 }];
const filterByLiterals = (objArr, literalArr) => {
const common = objArr.filter(el => {
return literalArr.includes(el['city']);
});
return common;
};
console.log(filterByLiterals(cities, source));コードのポイント
objArr.filter() の中で各オブジェクトの city プロパティの値を取得し、それが literalArr(つまり source 配列)に含まれているかを includes() でチェックしています。条件に合致した要素のみが結果の配列に残ります。
実行結果
上記のコードを実行すると、コンソールには次のように出力されます。
[ { city: 4 } ]source 配列に含まれる値は 1〜5 なので、city: 4 を持つオブジェクトだけが該当し、それ以外の { city: 6 } と { city: 8 } は除外されます。
まとめ
filter() と includes() を組み合わせることで、元の配列を変更することなく、条件に合致するオブジェクトだけを簡単に抽出できます。この手法は、IDのリストと照合して該当レコードを絞り込むなど、実務でも頻繁に活用されるパターンです。
-
JavaScriptでIDごとにオブジェクトの配列をグループ化する方法
JavaScriptでオブジェクトの配列をidなどの特定のキーごとにグループ化したい場合、reduce()メソッドを使うと簡潔に実装できます。この記事では、どのプロパティにも対応できる汎用的なgroupBy関数を作成し、実際のサンプルコードとともにその仕組みを詳しく解説します。 reduce()によるグループ化の考え方 reduce()は、配列の各要素を順番に処理しながら、1つの累積値(ここではオブジェクト)を組み立てていくメソッドです。各要素からキーの値を取り出し、その値がまだ結果オブジェクトに存在しなければ新しい配列を作成して、そこへ要素を追加していくことでグループ化を実現します。 サ
-
JavaScriptのオブジェクト配列に配列メソッドを適用する方法
JavaScriptでは、オブジェクトが格納された配列に対しても、通常の配列と同じようにpop()、push()、splice()などの標準的な配列メソッドをそのまま使用できます。オブジェクト配列はあくまで「配列」であるため、要素としてオブジェクトが入っていても配列操作のAPIは共通で動作します。 コード例 以下は、JavaScriptオブジェクトの配列に対して配列メソッドを使用するサンプルコードです。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8