Javascript 在下划线groupBy之后加入或合并json对象
我在当前的项目中使用了underline.js,它有一个很好的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...},{
\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没有任何帮助,我不知道。(如果你没有看到的话,我在上面的评论中加了一点。)最好,