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

【JavaScript】別のオブジェクト配列のIDと一致するかどうかで、配列内のオブジェクトプロパティをtrue/falseに設定する方法

JavaScriptでは、reduce()map()を組み合わせることで、ある配列内のオブジェクトのIDが別のオブジェクト配列のIDと一致するかどうかを判定し、その結果に応じてプロパティをtrue/falseとして設定できます。

基本的な考え方

まずreduce()を使って、照合元となる配列から「IDをキーとした検索用オブジェクト」を作成します。次にmap()で対象の配列を処理し、各要素のIDがその検索用オブジェクトに存在するかを確認して、新しいプロパティ(ここではmatchingResult)にtrueまたはfalseを設定します。

サンプルコード

以下に具体的なコード例を示します。

let firstDetails = [
  { "studentId": 101, "studentName": "John" },
  { "studentId": 102, "studentName": "David" },
  { "studentId": 103, "studentName": "Bob" }
]

let secondDetails = [
  { "studentId": 101, "studentName": "Robert" },
  { "studentId": 109, "studentName": "Mike" },
  { "studentId": 103, "studentName": "Adam" }
]

// secondDetails の studentId をキーとしたオブジェクトを生成
const obj = secondDetails.reduce((o, v) => (o[v.studentId] = true, o), {})

// firstDetails の各要素に matchingResult プロパティを追加
const output = firstDetails.map(v => ({ ...v, matchingResult: obj[v.studentId] || false }))

console.log(output)

実行方法

上記のプログラムを実行するには、Node.js環境で以下のコマンドを使用します。ここではファイル名をdemo316.jsとして保存したものとします。

node demo316.js

出力結果

プログラムを実行すると、以下のような出力が得られます。

PS C:\Users\Amit\javascript-code> node demo316.js
[
    { studentId: 101, studentName: 'John', matchingResult: true },
    { studentId: 102, studentName: 'David', matchingResult: false },
    { studentId: 103, studentName: 'Bob', matchingResult: true }
]

コードの解説

  • reduce()による検索用オブジェクトの作成: secondDetailsの各要素からstudentIdを取り出し、キーとして値trueを持つオブジェクトを構築しています。これにより、IDの照合がO(1)の高速な参照になります。
  • map()による新しい配列の生成: スプレッド構文(...v)を使って元のオブジェクトのプロパティをすべてコピーしつつ、matchingResultという新しいプロパティを追加しています。
  • || falseによるフォールバック: 一致するIDが存在しない場合、obj[v.studentId]undefinedになるため、|| falseによって明示的にfalseが設定されます。

この手法を使えば、2つの配列間でのIDの一致・不一致を効率的に判定でき、データのフィルタリングやフラグ管理など、さまざまな場面で応用できます。

  1. JavaScriptでフレックスアイテムの折り返し(flexWrap)を設定する方法

    JavaScriptでフレックスコンテナ内のアイテムを折り返すかどうかを設定するには、flexWrapプロパティを使用します。このプロパティにより、アイテムがコンテナの幅を超えた場合に、新しい行へ折り返すかどうかを動的に制御できます。 flexWrapプロパティの主な値 nowrap:アイテムを折り返さず、すべて1行に並べます(デフォルト値)。 wrap:必要に応じてアイテムを次の行へ折り返します。 wrap-reverse:折り返し方向を逆にして、アイテムを配置します。 サンプルコード 以下のコードを実行すると、JavaScriptでflexWrapプロパティを設定する方法を確認でき

  2. 【JavaScript入門】複数のオブジェクトを1つにマージして単一のオブジェクト配列を作成する方法

    JavaScriptでは、Object.assign()メソッドとスプレッド構文(...)を組み合わせることで、配列内の複数のオブジェクトを1つのオブジェクトに簡単にマージすることができます。 Object.assign()は、1つ以上のコピー元オブジェクトから、コピー先のオブジェクトへすべてのプロパティをコピーするためのメソッドです。スプレッド構文を使って配列の要素を展開することで、各オブジェクトのキーと値が1つのオブジェクトに統合されます。 コード例 以下のコードは、配列内の複数のオブジェクトを単一のオブジェクトにマージする例です。 <!DOCTYPE html> <ht