例如,我希望将下面的2JSON进行比较,并使用常见的JSON键值对获取返回值。
JSON1 = [{
"info" : {
"name": "xyz"
},
"add" : "london",
"no" : 1234,
"gender" : "male"
}]另一个JSON是
JSON2 = [{
"info" : {
"name": "abc"
},
"add" : "london",
"no" : 2456
}]需要以JSON的形式返回值,如下所示,但差异应该是空的。
json3 = [{
"info" : {
"name": ""
},
add : "london",
no : "",
gender : male
}]发布于 2022-03-28 07:21:14
您可以创建一个combineObjects()函数,该函数递归地组合输入对象。
我们将枚举输入对象键,如果两个输入的值不相同,则为每个属性返回一个空值。
如果两个对象中的值相同或缺失,我们将返回obj1或obj2属性的值。
const json1 = [{ "info" : { "name": "xyz" }, "add" : "london", "no" : 1234, "gender" : "male" }];
const json2 = [{ "info" : { "name": "abc"}, "add" : "london", "no" : 2456 }];
function combineObjects(obj1, obj2) {
const result = {};
// Get all keys...
let keys = [...new Set([...Object.keys(obj1), ...Object.keys(obj2)])];
for(let k of keys) {
if (obj1[k] && obj2[k] && typeof(obj1[k]) === 'object') {
result[k] = combineObjects(obj1[k], obj2[k]);
} else if (obj1[k] === obj2[k]) {
result[k] = obj1[k];
} else {
result[k] = (obj1[k] && obj2[k]) ? '' : obj1[k] || obj2[k];
}
}
return result;
}
const result = combineObjects(json1, json2);
console.log('Result:', result).as-console-wrapper { max-height: 100% !important; }<script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/2.3.1/luxon.min.js" integrity="sha512-Nw0Abk+Ywwk5FzYTxtB70/xJRiCI0S2ORbXI3VBlFpKJ44LM6cW2WxIIolyKEOxOuMI90GIfXdlZRJepu7cczA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
https://stackoverflow.com/questions/71643481
复制相似问题