我需要使用javascript根据键值合并两个json对象。
我有两个不同的变量g和c。
术语:所有值都需要合并。
var g = [ { id: 36, name: 'AAA', goal: 'yes' }, { id: 40, name: 'BBB', goal: 'yes' }, { id: 57, name: 'CCC', goal: 'yes' }, { id: 4, name: 'DDD', goal: 'yes' }, { id: 39, name: 'EEE', goal: 'yes' }, { id: 37, name: 'FFF', goal: 'yes' }, { id: 59, name: 'GGG', goal: 'yes' }, { id: 50, name: 'III', goal: 'yes' }, { id: 43, name: 'HHH', goal: 'yes' }, { id: 35, name: 'JJJ', goal: 'yes' } ] var c = [ { id: 36, name: 'AAA', circle: 'yes' }, { id: 40, name: 'BBB', circle: 'yes' }, { id: 57, name: 'CCC', circle: 'yes' }, { id: 42, name: 'ZZZ', circle: 'yes' }, { id: 4, name: 'DDD', circle: 'yes' }, { id: 39, name: 'EEE', circle: 'yes' }, { id: 37, name: 'FFF', circle: 'yes' }, { id: 59, name: 'GGG', circle: 'yes' }, { id: 43, name: 'HHH', circle: 'yes' }, { id: 35, name: 'JJJ', circle: 'yes' }, { id: 100, name: 'JJJ', circle: 'yes' } ]
我尝试了以下代码:但我合并在’c’变量中具有相同ID的内容。但是我需要合并比较“ g”和“ c”。
var arrayList = []; for(var i in g) { var getid = g[i].id; var getname = g[i].name; var getgoal = g[i].goal; for(var j in c){ var compareid = c[j].id; if(getid == compareid){ var obj = {}; obj.id = getid; obj.name = getname; obj.goal = 'yes'; obj.circle = 'yes'; console.log(obj); arrayList.push(obj); } } } console.log(arrayList);
预期产量:
[ { id: 36, name: 'AAA', goal: 'yes',circle: 'yes' }, { id: 40, name: 'BBB', goal: 'yes',circle: 'yes' }, { id: 57, name: 'CCC', goal: 'yes',circle: 'yes' }, { id: 4, name: 'DDD', goal: 'yes' ,circle: 'yes' }, { id: 39, name: 'EEE', goal: 'yes' ,circle: 'yes' }, { id: 37, name: 'FFF', goal: 'yes' ,circle: 'yes'}, { id: 59, name: 'GGG', goal: 'yes' ,circle: 'yes'}, { id: 50, name: 'III', goal: 'yes' ,circle: 'no'}, { id: 43, name: 'HHH', goal: 'yes' ,circle: 'yes'}, { id: 35, name: 'JJJ', goal: 'yes' ,circle: 'yes'} , { id: 42, name: 'ZZZ', goal: 'no' , circle: 'yes' }, { id: 100, name: 'JJJ',goal: 'no' , circle: 'yes' }]
如果objID中不存在ID,您忘了推入第一个循环;如果ID中不存在该对象的一个或多个ID,您忘了c循环遍历。c``g
obj
c
c``g
var g = [ { id: 36, name: 'AAA', goal: 'yes' }, { id: 40, name: 'BBB', goal: 'yes' }, { id: 57, name: 'CCC', goal: 'yes' }, { id: 4, name: 'DDD', goal: 'yes' }, { id: 39, name: 'EEE', goal: 'yes' }, { id: 37, name: 'FFF', goal: 'yes' }, { id: 59, name: 'GGG', goal: 'yes' }, { id: 50, name: 'III', goal: 'yes' }, { id: 43, name: 'HHH', goal: 'yes' }, { id: 35, name: 'JJJ', goal: 'yes' } ], c = [ { id: 36, name: 'AAA', circle: 'yes' }, { id: 40, name: 'BBB', circle: 'yes' }, { id: 57, name: 'CCC', circle: 'yes' }, { id: 42, name: 'ZZZ', circle: 'yes' }, { id: 4, name: 'DDD', circle: 'yes' }, { id: 39, name: 'EEE', circle: 'yes' }, { id: 37, name: 'FFF', circle: 'yes' }, { id: 59, name: 'GGG', circle: 'yes' }, { id: 43, name: 'HHH', circle: 'yes' }, { id: 35, name: 'JJJ', circle: 'yes' }, { id: 100, name: 'JJJ', circle: 'yes' } ], arrayList = [], obj_c_processed = []; for (var i in g) { var obj = {id: g[i].id, name: g[i].name, goal: g[i].goal}; for (var j in c) { if (g[i].id == c[j].id) { obj.circle = c[j].circle; obj_c_processed[c[j].id] = true; } } obj.circle = obj.circle || 'no'; arrayList.push(obj); } for (var j in c){ if (typeof obj_c_processed[c[j].id] == 'undefined') { arrayList.push({id: c[j].id, name: c[j].name, goal: 'no', circle: c[j].circle}); } } console.log(arrayList);