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

2 つの JavaScript 配列に対して SQL のような JOIN を実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-29 04:57:11673ブラウズ

How to Perform an SQL-like JOIN on Two JavaScript Arrays?

SQL JOIN と同様に、共通キーに基づいて 2 つの JavaScript 配列を結合する方法

JavaScript でデータを扱う場合、次のことが可能です。関連情報を含む複数の配列があり、それらを共通の属性に基づいて結合したい場合があります。このコンテキストでは、SQL JOIN 操作は複数のテーブルのデータをマージするのに役立ち、配列操作手法を使用して JavaScript で同様の機能を実現できます。

userProfiles と質問という 2 つの配列があるとします。 userProfiles には id および name プロパティを持つオブジェクトが含まれ、質問には id、text、および createdBy プロパティを持つオブジェクトが含まれます。質問の createdBy プロパティは、userProfiles の id 値に対応します。

私たちの目標は、これらの配列を「結合」して、id、text、および name プロパティを持つオブジェクトを含む新しい配列を作成することです。 SQL では、この操作は次のクエリで表されます。

SELECT u.id, q.text, u.name
FROM userProfiles u
JOIN questions q ON q.createdBy=u.id

JavaScript では、reduce() メソッドと concat() メソッドを使用して結合を実装できます。 innerJoin 関数を使用した例を次に示します。

const innerJoin = (xs, ys, sel) =>
    xs.reduce((zs, x) =>
    ys.reduce((zs, y) =>        // cartesian product - all combinations
    zs.concat(sel(x, y) || []), // filter out the rows and columns you want
    zs), []);

この関数を使用すると、次のように結合を実行できます。

const result = innerJoin(userProfiles, questions,
    ({id: uid, name}, {id, text, createdBy}) =>
        createdBy === uid && {id, text, name});

この innerJoin 関数は、基本的に 2 つの配列のデカルト積を実行します。 、オブジェクトのペアごとに、質問の createdBy プロパティが userProfiles の id プロパティと一致するかどうかを確認します。一致する場合、目的のプロパティを持つオブジェクトが返されます。

結果の結果の配列には、次の形式のオブジェクトが含まれます:

{ id, text, name }

このアプローチにより、複数の配列のデータを結合できます。 SQL JOIN 操作と同様に、共通キーに基づきます。 JavaScript の配列操作機能を活用することで、アプリケーションの効率的かつ柔軟なデータ変換を実現できます。

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

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