0

私は現在のプロジェクトでunderscore.jsを使用しています。これは素晴らしい_.groupBy方法です。

これにより、配列がそのような形式でグループ化されます。

var obj1 ={
  '0':[{ ... json object...},{ ... json object...},{ ... json object...}],
  '1':[{ ... json object...},{ ... json object...},{ ... json object...}],
  '2':[{ ... json object...},{ ... json object...},{ ... json object...}]
}

var obj2 = {
  '0':[{ ... another json object...},{ ...another json object...}],
  '1':[{ ... another json object...},{ ...another json object...}],
  '2':[{ ... another json object...},{ ... another json object...}]
}

今、私はそれらに参加/マージ/拡張したいのですが...しかし_.extend、私が期待するようには機能しません。

私の期待する結果は

{'0':[{ ... json object...},{ ... json object...},{ ... json object...},{ ... another json object...},{ ...another json object...}],
'1':[{ ... json object...},{ ... json object...},{ ... json object...},{ ... another json object...},{ ...another json object...}],
 '2':[{ ... json object...},{ ... json object...},{ ... json object...},{ ... another json object...},{ ... another json object...}]}

基本的に、内部のjsonオブジェクトが異なっていてもobj1、のjsonキーに基づいて配列を拡張する必要があります。obj2

基本的に、jsonオブジェクトのSQL結合操作のようなものが必要になります...

だからどんな助けも素晴らしいでしょう...

4

2 に答える 2

3

underscore.js 固有の回答が表示されていないため、一般的な JavaScript の回答を次に示します。

にマージobj2するには、次のように のエントリをobj1ループし、obj2これらの配列を の同等の配列に追加しますobj1

var key, a1, a2;
for (key in obj2) {
  if (obj2.hasOwnProperty(key)) {
    a2 = obj2[key];
    a1 = obj1[key];
    if (a1) {
      a1.push.apply(a1, a2); // Tricky, see below
    }
    else {
      obj1[key] = a2;
    }
  }
}

それは にマージobj2され、の配列がその場obj1で変更されます。対応するスロットに の配列がない場合は、 の配列obj1を再利用します。obj2obj1

実例| ソース

その「トリッキーな」ビットについて:

a1.push.apply(a1, a2);

それはから の要素を の最後に追加することです。詳細はブログに書いてありますが、基本的には引数として指定した数だけ配列の末尾に要素を追加し(例えば、、、、を配列にプッシュ)、何を使うかを指定して関数を呼び出します(最初の引数)。配列として渡す引数 (2 番目の引数)。a2a1Array#pusha.push(1, 2, 3)123Function#applythis

于 2012-12-10T22:36:59.807 に答える