簡體   English   中英

下划線后加入或合並json對象

[英]joining or merging json objects after underscore groupBy

我在當前項目中使用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對象不同,我也需要基於obj1obj2的json鍵擴展數組。

基本上需要對json對象執行類似sql join操作的操作...

因此,任何幫助都會很棒...

好吧,由於尚未出現針對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的數組。 如果obj1在對應的插槽中沒有一個數組,它將重用obj2的數組。

現場示例 | 資源

關於“棘手的”位:

a1.push.apply(a1, a2);

這樣做是元素從a2 追加a1的末尾。 我的博客上詳細信息 ,但基本上, Array#push添加元素的數組的末尾,多達你指定作為參數(例如, a.push(1, 2, 3)12 ,和3到陣列),以及Function#apply呼叫的功能,指定作為使用什么this (第一個參數)和參數傳遞給它,作為一個陣列(第二個參數)。

我需要做類似的事情。 連接兩個對象,但確保兩個groupby字段都具有相同的名稱san 我需要從some_scores追加score 需要_.each來創建外部聯接。 Map會創建您需要的名稱/值的最終對象:

   var x = _.chain(moves)
            .union(some_scores)    
            .groupBy('san')
            .each(function(o){ o.push({score:''}); })
            .map(function(o){return {san:o[0].san, to:o[0].to, score:o[1].score  }; })
            .value();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM