我需要合并两个JSON对象。
第一个对象:
var objectA = {
"UUID1": {
"user": {
"ID": "1"
}
},
"UUID2": {
"user": {
"ID": "2"
}
},
"UUID3": {
"user": {
"ID": "3"
}
}
}
第二个对象:
var objectB = {
"UUID4": {
"user": {
"ID": "4"
}
},
"UUID5": {
"user": {
"ID": "3"
}
},
"UUID6": {
"user": {
"ID": "2"
}
}
}
预期结果:
{
"UUID1": {
"user": {
"ID": "1"
}
},
"UUID2": {
"user": {
"ID": "2"
}
},
"UUID3": {
"user": {
"ID": "3"
}
},
"UUID4": {
"user": {
"ID": "4"
}
}
}
诀窍是,UUID会有所不同,但主键是用户ID。所以,我需要比较用户ID并只保留一个UUID。
有一个聪明的方法来解决这个问题吗?使用Object.keys(objectX).forEach
的嵌套循环对我来说不起作用:(
谢谢!
答案 0 :(得分:1)
您可以创建自定义功能来为您处理此问题。像这样:
var objectA = {
"UUID1": {"user": {"ID": "1"}},
"UUID2": {"user": {"ID": "2"}},
"UUID3": {"user": {"ID": "3"}}
}
var objectB = {
"UUID4": {"user": {"ID": "4"}},
"UUID5": {"user": {"ID": "3"}},
"UUID6": {"user": {"ID": "2"}}
}
function merge() {
var result = {};
var ids = [];
for (var i = 0; i < arguments.length; i++) {
for (var uuid in arguments[i]) {
if (~ids.indexOf(arguments[i][uuid].user.ID)) {
continue;
}
result[uuid] = arguments[i][uuid];
ids.push(arguments[i][uuid].user.ID);
}
}
return result;
}
var merged = merge(objectA, objectB);
console.log(merged);
答案 1 :(得分:1)
您可以使用哈希表来记住插入的ID
并从给定对象中构建新对象。
var objectA = { UUID1: { user: { ID: "1" } }, UUID2: { user: { ID: "2" } }, UUID3: { user: { ID: "3" } } },
objectB = { UUID4: { user: { ID: "4" } }, UUID5: { user: { ID: "3" } }, UUID6: { user: { ID: "2" } } },
hash = Object.create(null),
result = [objectA, objectB].reduce(function (r, o) {
Object.keys(o).forEach(function (k) {
if (!hash[o[k].user.ID]) {
hash[o[k].user.ID] = true;
r[k] = o[k];
}
});
return r;
}, {});
console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;