javascript +基于key组合json数组,

时间:2017-01-12 05:07:33

标签: javascript json node.js underscore.js

我正在尝试将两个json合并为一个json。我不想合并所有密钥,我添加了我的代码。 代码应该是javascript或节点(下划线)。

var json1 = [{user_id:1,friend_id:2,desc:'aaa'}, {user_id:3,friend_id:4,desc:'ccc'}, {user_id:1,friend_id:1,desc:'ccc'} , {user_id:1,friend_id:3,desc:'ccc'} ];


var json2 = [{reference_id:1,name:'A'},{reference_id:2,name:'B'},{reference_id:3,name:'C',age:30},{reference_id:4,name:'D'}];

期待输出:

输出:

json1 = [{user_id:1,friend_id:2,desc:'aaa',user_name:'A',friend_name:'B'}, {user_id:3,friend_id:4,desc:'ccc',user_name:'C',friend_name:'D'}, {user_id:1,friend_id:1,desc:'ccc',user_name:'A',friend_name:'A'} , {user_id:1,friend_id:3,desc:'ccc',user_name:'A',friend_name:'C'} ];

Logic Js Code:

for (var i = 0; i < json1.length; i++) {
    var user_id = json1[i].user_id;
    var friend_id = json1[i].friend_id;
    for (var j = 0; j < json2.length; j++) {
        if (json2[j].reference_id == user_id) {
             json1[i].user_name = json2[j].name;
        }
        if (json2[j].reference_id == friend_id) {
             json1[i].friend_name = json2[j].name;
        }
    }
}

我在jsfiddle中添加了我的代码。Click Here

相同的代码应转换为下划线。

2 个答案:

答案 0 :(得分:2)

你在这里重复一些努力。如果json2.length很小,那真的不重要;但如果它很大,你将付出代价:每次查看json1的元素时,你都会循环遍历json2的每个元素。所以相反,想一想:

var personMap = {};
json2.forEach(function(item) {
    personMap[item.reference_id] = item.name;
});

json1.forEach(function(item) {
    item.user_name = personMap[item.user_id];
    item.friend_name = personMap[item.friend_id];
});

答案 1 :(得分:1)

普通香草JS中的代码应该可以工作,除了&#34; ==&#34;在你错误地放置的地方&#34; =&#34;。

替换这些:

if (json2[j].reference_id = user_id) {
...
if (json2[j].reference_id = friend_id) {
...

用这些:

if (json2[j].reference_id == user_id) {
...
if (json2[j].reference_id == friend_id) {

试试这是下划线:

_.map(json1, function(item){ 
    var user_id = item.user_id;
    var friend_id = item.friend_id;

    _.map(json2, function(item2){

    if (item2.reference_id == user_id) {
         item.user_name = item2.name;
       }
    if (item2.reference_id == friend_id) {
         item.friend_name = item2.name;
    }
});


 });