Javascript 在下划线groupBy之后加入或合并json对象

Javascript 在下划线groupBy之后加入或合并json对象,javascript,json,underscore.js,Javascript,Json,Underscore.js,我在当前的项目中使用了underline.js,它有一个很好的\uu.groupBy方法 这组数组的格式就是这样的 var obj1 ={ '0':[{ ... json object...},{ ... json object...},{ ... json object...}], '1':[{ ... json object...},{ ... json object...},{ ... json object...}], '2':[{ ... json object...},{

我在当前的项目中使用了underline.js,它有一个很好的
\uu.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...}]
}
现在我想加入/合并/扩展它们。。。但是,
\uu0.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...}]}
基本上,我需要基于
obj1
obj2
的json键扩展数组,即使内部json对象不同

基本上需要对json对象执行sql连接操作之类的操作


因此,任何帮助都将是非常好的…

好吧,由于没有出现特定于underline.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
的数组

|

关于“棘手”的部分:


这样做的目的是将
a2
中的元素附加到
a1
的末尾,但基本上,将元素添加到数组的末尾,只要指定为参数(例如,
a.push(1,2,3)
1
2
3
推送到数组中),并调用函数指定作为
(第一个参数)使用的内容以及作为数组传递给它的参数(第二个参数)。

好吧,由于没有出现特定于下划线.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
的数组

|

关于“棘手”的部分:


这样做的目的是将
a2
中的元素附加到
a1
的末尾,但基本上,只要指定为参数,就可以将元素添加到数组的末尾(例如,
a.push(1,2,3)
1
2
3
推到数组上),并调用函数,指定用作此
的内容(第一个参数)以及作为数组传递给它的参数(第二个参数).

我需要做一些类似的事情。连接两个对象,但确保两个groupby字段具有相同的名称,
san
。我需要从
一些分数中附加
分数
。需要.\u.每个都要创建外部连接。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();

我需要执行类似的操作。连接两个对象,但确保两个groupby字段的名称相同,
san
。我需要从
some_scores
中追加
score
。需要u。每个对象都要创建外部连接。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();

这些不是JSON对象。它们只是对象。:-)JSON是一种文本数据表示法(它是您正在使用的JavaScript对象初始值设定语法的子集)。(这些示例是完全有效的对象初始值设定项,但不是有效的JSON,它要求键和字符串使用双引号,而不是单引号。)很抱歉,无法帮助解决实际问题,我根本不知道下划线.js,所以我不知道它是否有什么帮助。JavaScript本身不需要,您只需循环并添加数组即可。谢谢你的提醒。这就是下划线groupBy的结果。。。这会对u.extend方法产生任何影响。或者你提到它是因为措辞的正确性。谢谢你的回复=)@silverfighter:只是为了更正术语,因为有时候它很重要。很抱歉,下划线.js没有任何帮助,我不知道。(如果您没有看到,我会在上面的注释中添加一点内容。)最好,这些不是JSON对象。它们只是物体。:-)JSON是一种文本数据表示法(它是您正在使用的JavaScript对象初始值设定项语法的子集)。(这些示例是完全有效的对象初始值设定项,但不是有效的JSON,它要求键和字符串使用双引号,而不是单引号。)很抱歉,无法帮助解决实际问题,我根本不知道下划线.js,所以我不知道它是否有什么帮助。JavaScript本身不需要,您只需循环并添加数组即可。谢谢你的提醒。这就是下划线groupBy的结果。。。这会对u.extend方法产生任何影响。或者你提到它是因为措辞的正确性。谢谢你的回复=)@silverfighter:只是为了更正术语,因为有时候它很重要。很抱歉,下划线.js没有任何帮助,我不知道。(如果你没有看到的话,我在上面的评论中加了一点。)最好,