LoDash-共通キーを介して1つのコレクション値を別のコレクション値にプッシュする方法

webmaster_sean

私は2つのコレクションを持っています。

var a = 
[
 {unique_id: "001", state: "CO"},
 {unique_id: "001", state: "TX"},
 {unique_id: "001", state: "CC"},
 {unique_id: "002", state: "CC"},
 {unique_id: "002", state: "NY"}
]

そして

var b = 
[
 {unique_id: "001", states:[]},
 {unique_id: "002", states:[]}
]

そして私は取得したい:

var b = 
[
 {unique_id: "001", states:["CO","TX","CC"]},
 {unique_id: "002", states:["CC","NY"]}
]

「b」配列は同じ順序である必要があり、unique_idの一部には値がありません。

私はLoDashhttps //lodash.com/を使おうとしています-だから、誰かがLoDashでこれを解決できれば、それは素晴らしいことです!

パヴァン・ラヴィパティ

このソリューションの時間計算量は最適ではありませんが(O(n ^ 2))、値を「b」にプッシュすることを一致させる方法を考えるのに役立つ場合があります。

_.forEach(a, function(element1){
  _.forEach(b, function(element2){
    if (element2.unique_id === element1.unique_id) {
     element2.states.push(element1.state);
    }
  });
});

おそらく、より良い解決策は、lodashの_.indexByメソッドを使用して、b内のオブジェクトを一意のIDでインデックス付けすることですたとえば、次のようにbのオブジェクトにインデックスを付けることができます。

var c = _.indexBy(b, 'unique_id')

その結果、次のようになります。

{001:{unique_id: "001", states:[]}, 002: {unique_id: "002", states:[]}}

c配列内のオブジェクトは、メモリ内のb配列内のオブジェクトと同じオブジェクトを指しているため、c内のオブジェクトを直接変更でき、bはメモリ内の更新されたオブジェクトを参照します。そう:

_.forEach(a, function(element1){
  if (element1.unique_id in c) {
    c[element1.unique_id].states.push(element1.state);
  }
})

ここで、b配列を見ると、値は次のようになっていることがわかります。

var b = 
[
 {unique_id: "001", states:["CO","TX","CC"]},
 {unique_id: "002", states:["CC","NY"]}
]

このソリューションの時間計算量はO(n)に近いはずです。これは、ネストされた_.forEachアプローチを使用するよりもはるかに優れています。コードスニペット:

var a = 
[
 {unique_id: "001", state: "CO"},
 {unique_id: "001", state: "TX"},
 {unique_id: "001", state: "CC"},
 {unique_id: "002", state: "CC"},
 {unique_id: "002", state: "NY"}
];

var b = 
[
 {unique_id: "001", states:[]},
 {unique_id: "002", states:[]}
];

var c = _.indexBy(b, 'unique_id');

_.forEach(a, function(element1){
  if (element1.unique_id in c) {
    c[element1.unique_id].states.push(element1.state);
  }
});

document.writeln(JSON.stringify(b))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.js"></script>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Lodash / javascript:2つのコレクションを比較して違いを返す

分類Dev

Lodashを使用してコレクションから重複する値を見つける

分類Dev

コレクション:lodashを使用してキーをマージします

分類Dev

lodashを使用していくつかのキーに基づいてコレクションを合計するにはどうすればよいですか?

分類Dev

Lodashを使用して2つのコレクションをフィルタリングする

分類Dev

Lodashで子ノードのコレクションを作成する

分類Dev

lodashを使用してコレクションの正しいタイプを検証します

分類Dev

lodashコレクションで変数名を使用する

分類Dev

Lodashは重複するオブジェクトキーからコレクションを作成します

分類Dev

lodashの条件に基づいて、オブジェクトコレクションに新しいプロパティを追加します

分類Dev

プロパティlodashによるコレクションアイテムのマップ

分類Dev

Lodash-ネストされたコレクションをprop値の配列でフィルタリングします

分類Dev

Angular / lodash-コレクションから複数のオブジェクトを削除します

分類Dev

Angular / lodash-コレクションから複数のオブジェクトを削除します

分類Dev

純粋なJSまたはLodashを使用して、配列に基づいてコレクションキーを並べ替えます

分類Dev

lodashを使用してコレクション内のすべてのアイテムを深く平らにします

分類Dev

AngularJS-lodashを使用したコレクション内のコレクションのフィルタリングの改善

分類Dev

ネストされたコレクションのLodashマッピング

分類Dev

lodashは、コレクションデータを使用してディープオブジェクトを生成します

分類Dev

lodash _.filter()を使用してfirestoreコレクションをフィルタリングするにはどうすればよいですか?

分類Dev

Lodash:orderByを使用してコレクションで大文字と小文字を区別しない並べ替えを行う方法?

分類Dev

lodashのincludeメソッドを使用して、オブジェクトがコレクション内にあるかどうかを確認するにはどうすればよいですか?

分類Dev

別のコレクション値に基づいて1つのコレクションを更新する

分類Dev

外部配列に基づくLodashソートコレクション

分類Dev

Lodash の JSON から複数のネストされたコレクションからアイテムをプルする

分類Dev

コレクションを1つのキー複数値マップに変換するJava8の方法

分類Dev

lodashを使用してオプションの属性でJavaScript配列を注文する

分類Dev

(Lodash)コレクションに同一のオブジェクトが存在する(ネストされている)かどうかを確認する方法はありますか?

分類Dev

Lodash.removeを使用したVuexミューテーションによって状態を変更しても、Vueコンポーネントでリアクティブな再レンダリングがトリガーされません

Related 関連記事

  1. 1

    Lodash / javascript:2つのコレクションを比較して違いを返す

  2. 2

    Lodashを使用してコレクションから重複する値を見つける

  3. 3

    コレクション:lodashを使用してキーをマージします

  4. 4

    lodashを使用していくつかのキーに基づいてコレクションを合計するにはどうすればよいですか?

  5. 5

    Lodashを使用して2つのコレクションをフィルタリングする

  6. 6

    Lodashで子ノードのコレクションを作成する

  7. 7

    lodashを使用してコレクションの正しいタイプを検証します

  8. 8

    lodashコレクションで変数名を使用する

  9. 9

    Lodashは重複するオブジェクトキーからコレクションを作成します

  10. 10

    lodashの条件に基づいて、オブジェクトコレクションに新しいプロパティを追加します

  11. 11

    プロパティlodashによるコレクションアイテムのマップ

  12. 12

    Lodash-ネストされたコレクションをprop値の配列でフィルタリングします

  13. 13

    Angular / lodash-コレクションから複数のオブジェクトを削除します

  14. 14

    Angular / lodash-コレクションから複数のオブジェクトを削除します

  15. 15

    純粋なJSまたはLodashを使用して、配列に基づいてコレクションキーを並べ替えます

  16. 16

    lodashを使用してコレクション内のすべてのアイテムを深く平らにします

  17. 17

    AngularJS-lodashを使用したコレクション内のコレクションのフィルタリングの改善

  18. 18

    ネストされたコレクションのLodashマッピング

  19. 19

    lodashは、コレクションデータを使用してディープオブジェクトを生成します

  20. 20

    lodash _.filter()を使用してfirestoreコレクションをフィルタリングするにはどうすればよいですか?

  21. 21

    Lodash:orderByを使用してコレクションで大文字と小文字を区別しない並べ替えを行う方法?

  22. 22

    lodashのincludeメソッドを使用して、オブジェクトがコレクション内にあるかどうかを確認するにはどうすればよいですか?

  23. 23

    別のコレクション値に基づいて1つのコレクションを更新する

  24. 24

    外部配列に基づくLodashソートコレクション

  25. 25

    Lodash の JSON から複数のネストされたコレクションからアイテムをプルする

  26. 26

    コレクションを1つのキー複数値マップに変換するJava8の方法

  27. 27

    lodashを使用してオプションの属性でJavaScript配列を注文する

  28. 28

    (Lodash)コレクションに同一のオブジェクトが存在する(ネストされている)かどうかを確認する方法はありますか?

  29. 29

    Lodash.removeを使用したVuexミューテーションによって状態を変更しても、Vueコンポーネントでリアクティブな再レンダリングがトリガーされません

ホットタグ

アーカイブ