オプション 1、プレーン js
各リストを ID ごとのセットに変換することをお勧めします。
{1: {x: 1, y: 1}, 2: {x: 2, y: 2}}
次に、セットの 1 つ (または両方) に対して for を実行し、これら 2 つの属性を使用して新しい辞書を作成します。この後者の部分は、内部結合と外部結合のどちらを探しているかによって異なります。これにより、ほぼ線形のランタイムが得られるはずです。辞書の JavaScript 実装は非常に効率的です。
オプション 2、アンダースコア、密な ID セットの場合、_.zip() を使用
が比較的密集しており、外部結合が必要な場合id
、または ID のセットがまったく同じであることを事前に知っている場合、別のオプションとして、データを 3 つの配列 (属性ごとに 1 つ) に詰め込み、アンダースコアを使用します。 zip() メソッド。
オプション 3、アンダースコア、_.groupBy() を使用
カスタム比較メソッドを使用してリストで _.groupBy() を実行するさらに別の可能性。これにより、複数のキーで結合することもできます。ただし、直接の結果は次の形式の辞書になるため、簡単な後処理が必要になります。
{1: [{'id':'1', 'x':'1', 'y':'2'}, {'id':'1', 'z':'1'}],
2: [{'id':'2', 'x':'2', 'y':'2'}, {'id':'2', 'z':'2'}]}
後者の場合の内部結合動作は、リスト内の項目の最大数 (例では 2) を持たない、結果の辞書内の項目を除外することによって実現できます。