ホームページ >データベース >mysql チュートリアル >2 つの JavaScript 配列で SQL スタイルの内部結合を実行するにはどうすればよいですか?

2 つの JavaScript 配列で SQL スタイルの内部結合を実行するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-30 13:55:11165ブラウズ

How Can I Perform an SQL-Style Inner Join on Two JavaScript Arrays?

SQL のような構文を使用した JavaScript 配列の結合

問題:

2 つの JavaScript があります配列: 1 つはユーザー プロファイルを含み、もう 1 つは質問を含みます。ユーザー プロファイル配列は id キーと name キーを持つオブジェクトで構成され、質問配列は id、text、および createdBy キーを持つオブジェクトで構成されます。質問の createdBy キーは常にユーザー プロファイルの id 値と一致します。

あなたの目標は、データベース内のテーブルを結合するのと同じような方法でこれらの配列を「結合」し、id を持つオブジェクトを含む新しい配列を作成することです。

解決策:

JavaScript は、内部結合を実行する効率的な方法を提供します。次の手順を使用して配列を作成します:

  1. 内部結合関数を定義します:

    3 つのパラメーターを取る innerJoin という関数を作成します。 join、xs と ys、および join に含めるプロパティを指定するセレクター関数 sel array.

  2. デカルト積リダクション:

    reduce を使用して xs の各要素を反復処理し、各要素について、xs の各要素を反復処理します。はい。これにより、2 つの配列のデカルト積が効果的に作成されます。

  3. フィルターと選択:

    ネストされたループ内で、セレクター関数 sel を適用します。要素の各ペア。セレクター関数は、必要なプロパティを持つ新しいオブジェクトを返す必要があります。セレクター関数が falsey 値を返した場合、ペアは破棄されます。

  4. 結果の連結:

    innerJoin 関数は、セレクターによって返されたすべてのオブジェクトを連結した結果function.

実装:

次のデータを使用したデモを示します。セット:

const userProfiles = [
  {id: 1, name: "Ashok"},
  {id: 2, name: "Amit"},
  {id: 3, name: "Rajeev"},
];

const questions = [
  {id: 1, text: "text1", createdBy: 2},
  {id: 2, text: "text2", createdBy: 2},
  {id: 3, text: "text3", createdBy: 1},
  {id: 4, text: "text4", createdBy: 2},
  {id: 5, text: "text5", createdBy: 3},
  {id: 6, text: "text6", createdBy: 3},
];
const result = innerJoin(userProfiles, questions,
  ({id: uid, name}, {id, text, createdBy}) =>
    createdBy === uid && {id, text, name});

出力:

console.log(result);
// Outputs:
[
  {id: 1, text: "text3", name: "Ashok"},
  {id: 2, text: "text1", name: "Amit"},
  {id: 2, text: "text2", name: "Amit"},
  {id: 2, text: "text4", name: "Amit"},
  {id: 3, text: "text5", name: "Rajeev"},
  {id: 3, text: "text6", name: "Rajeev"},
]

この出力は、innerJoin 関数が ID、テキストを選択して 2 つの配列を正常に結合したことを示しています。 、プロパティに名前を付けます。

以上が2 つの JavaScript 配列で SQL スタイルの内部結合を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。