[英]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對象不同,我也需要基於obj1
和obj2
的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)
推1
, 2
,和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.