我想从两个给定的对象 A 和 B 生成一个对象,只有 B 的值与 A 不同。我们可以假设所有字段都存在于 A 和 B 中。
示例:给定以下两个对象:
一个
{
"firstName": "John",
"lastName": "Doe",
"nickname": "Johnny",
"location": {
"latitude": 1.0,
"longitude": 1.0
},
"email": "john.doe@company.com"
}
B
{
"firstName": "John",
"lastName": "Doe",
"nickname": "John-Boy",
"location": {
"latitude": 1.0,
"longitude": 2.0
},
"email": "john.doe@company.com"
}
由于昵称和位置发生了变化,我希望结果是:
{
"nickname": "John-Boy",
"location": {
"latitude": 1.0,
"longitude": 2.0
}
}
请注意,我需要完整的 location
对象,而不仅仅是更改后的 longitude
实现此目标的好方法是什么?
最佳答案
var array1 = {
"firstName": "John",
"lastName": "Doe",
"nickname": "Johnny",
"location": {
"latitude": 1.0,
"longitude": 1.0
},
"email": "john.doe@company.com"
}
var array2 = {
"firstName": "John",
"lastName": "Doe",
"nickname": "John-Boy",
"location": {
"latitude": 1.0,
"longitude": 2.0
},
"email": "john.doe@company.com"
}
var currentString;
var resultObject = {};
function loopOverObject(sourceObj, targetObj,innerObjName) {
for (var key in sourceObj) {
currentString = null;
if (sourceObj.hasOwnProperty(key)) {
if (typeof sourceObj[key] === "object") {
loopOverObject(sourceObj[key],targetObj,key);
break;
}
else {
if (sourceObj[key] !== targetObj[key]) {
if (innerObjName) {
if (resultObject[innerObjName]) {
resultObject[innerObjName][key] = sourceObj[key];
}
else {
resultObject[innerObjName] = JSON.parse('{"'+key+'": '+sourceObj[key]+'}');
}
}
else {
currentString = sourceObj[key];
}
}
}
if (currentString) {
resultObject[key]=currentString;
}
}
}
return resultObject;
};
var result = loopOverObject(array2,array1);
var resultDiv = document.getElementById("result")
resultDiv.innerHTML = JSON.stringify(result);
<div id="result"></div>
关于javascript - 获取具有不同值的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27900939/