JavaScriptで配列を別の配列を使ってフィルタリングする方法
JavaScriptでは、2つの配列を受け取り、1つ目の配列から2つ目の配列に含まれていない要素だけを抽出した新しい配列を返す関数が必要になる場面がよくあります。これはいわゆる「差集合」の計算であり、データの絞り込みや比較処理で非常に役立ちます。
この処理を実現するには、Array.prototype.filter() メソッドを使って1つ目の配列を走査し、各要素が2つ目の配列に存在するかどうかを Array.prototype.includes() メソッド(または indexOf())で判定するのが最もシンプルで読みやすいアプローチです。
実装例
実際のコードは以下のようになります。
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [1, 3, 5];
const filterUnwanted = (arr1 = [], arr2 = []) => {
let filtered = [];
filtered = arr1.filter(el => {
const index = arr2.indexOf(el);
// index が -1 の場合、その要素は2つ目の配列に存在しない
return index === -1;
});
return filtered;
};
console.log(filterUnwanted(arr1, arr2));実行結果
コンソールに出力される結果は以下のとおりです。
[2, 4]
コードの解説
このコードでは、filter() が arr1 の各要素に対してコールバック関数を実行します。コールバック内では indexOf() を使って、その要素が arr2 内に存在するかを確認しています。戻り値が -1 であれば要素は arr2 に存在しないため、その要素は結果の配列に残ります。
なお、より現代的な書き方としては includes() を使うこともできます。
const filterUnwanted = (arr1 = [], arr2 = []) => arr1.filter(el => !arr2.includes(el)); console.log(filterUnwanted([1, 2, 3, 4, 5], [1, 3, 5])); // [2, 4]
どちらの方法でも元の配列は変更されず、常に新しい配列が返されるため、安全に利用できます。大量のデータを扱う場合は、検索対象となる2つ目の配列を Set に変換しておくと、判定処理のパフォーマンスを大幅に向上させることができます。
-
JavaScriptにおける配列の分割代入(Destructuring)の基本と使い方
分割代入(Destructuring)とは、配列から値を取り出して個別の変数に展開するための構文です。ES2015(ES6)で導入されたこの機能を使うと、配列の各要素を簡潔かつ読みやすく変数に割り当てることができます。 配列の分割代入のサンプルコード 以下は、JavaScriptで配列の分割代入を行うコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport&quo
-
【JavaScript】filterとjoinを組み合わせて、条件に合う配列要素だけを結合する方法
JavaScriptでは、filter()メソッドとjoin()メソッドを組み合わせることで、条件を満たす要素だけを抽出し、それらを任意の区切り文字で1つの文字列に結合できます。本記事では、配列の中から「2で割り切れる要素(偶数)」だけを取り出して結合する具体例を、動作するサンプルコードとともに解説します。 処理の流れ:filter() と join() の役割 filter():コールバック関数が true を返した要素だけを集めた新しい配列を作成します。元の配列は変更されません。 join():配列内のすべての要素を、引数で指定した区切り文字で連結し、1つの文字列として返します。引数