我正在尝试将两个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
相同的代码应转换为下划线。
答案 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;
}
});
});