Json对象与唯一ID合并

时间:2014-08-20 09:47:37

标签: json node.js

我有多个json对象

json1 = [
    {'category_id':1,'name':'test1' },
    {'category_id':1,'name':'test2' },
    {'category_id':1,'name':'test3' },
    {'category_id':2,'name':'test2' },
    {'category_id':3,'name':'test1' }
];

json2 = [{'category_id':1,'type':'test1'}];

json3 = [
    {'category_id':1,'color':'black'},
    {'category_id':2,'color':'black'},
    {'category_id':3,'color':'white'}
];

我期待像这样的输出

final = [
    {'category_id':1,'name':'test1','type':'test`','color':'black' },
    {'category_id':1,'name':'test2','type':'test`','color':'black' },
    {'category_id':1,'name':'test3','type':'test`','color':'black' },
    {'category_id':2,'name':'test2','color':'black' },
    {'category_id':3,'name':'test1','color':'white' }
];

因为我有很长的json对象。循环是好主意还是不好?是否有任何内置功能可以做同样的事情。

2 个答案:

答案 0 :(得分:2)

使用underscore,您可以通过以下方式实现:

Demo Fiddle

var jsons = [json1, json2, json3];

var final = {};

// merge all data
_.each(jsons, function (jsonArr) {
    _.each(jsonArr, function (json) {
        final[json.category_id] = _.extend({}, final[json.category_id], json);
    });
});

// map it back onto json1    
var finalArr = _.map(json1, function (json) {
    return final[json.category_id];
});
console.log(finalArr);

finalArr的最终值:

enter image description here

答案 1 :(得分:0)

以下是如何在普通javascript中执行相同操作的方法。 :)

var final = {};

var jsons = [json1, json2, json3];

for(var i=0;i<jsons.length;i++){
    final[i]=jsons[i];
}

Fiddle

编辑:

好吧,你必须以编程方式完成它!