javascript + 根据键组合 json 数组,

javascript + combine json arrays based on key,

我正在尝试将两个 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代码:

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

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

您在普通 JS 中的代码应该可以工作,除了在您错误放置“=”的地方的“==”。

替换这些:

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;
    }
});


 });

您在这里重复了一些努力。 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];
});