ホームページ >データベース >mysql チュートリアル >2 つの JavaScript 配列で SQL スタイルの内部結合を実行するにはどうすればよいですか?
SQL のような構文を使用した JavaScript 配列の結合
問題:
2 つの JavaScript があります配列: 1 つはユーザー プロファイルを含み、もう 1 つは質問を含みます。ユーザー プロファイル配列は id キーと name キーを持つオブジェクトで構成され、質問配列は id、text、および createdBy キーを持つオブジェクトで構成されます。質問の createdBy キーは常にユーザー プロファイルの id 値と一致します。
あなたの目標は、データベース内のテーブルを結合するのと同じような方法でこれらの配列を「結合」し、id を持つオブジェクトを含む新しい配列を作成することです。
解決策:
JavaScript は、内部結合を実行する効率的な方法を提供します。次の手順を使用して配列を作成します:
内部結合関数を定義します:
3 つのパラメーターを取る innerJoin という関数を作成します。 join、xs と ys、および join に含めるプロパティを指定するセレクター関数 sel array.
デカルト積リダクション:
reduce を使用して xs の各要素を反復処理し、各要素について、xs の各要素を反復処理します。はい。これにより、2 つの配列のデカルト積が効果的に作成されます。
フィルターと選択:
ネストされたループ内で、セレクター関数 sel を適用します。要素の各ペア。セレクター関数は、必要なプロパティを持つ新しいオブジェクトを返す必要があります。セレクター関数が falsey 値を返した場合、ペアは破棄されます。
結果の連結:
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 サイトの他の関連記事を参照してください。