javascript - 获取具有不同值的对象

标签 javascript object diff

我想从两个给定的对象 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/

相关文章:

javascript - ReactJS:获取选定值时无法读取 null 的属性 'value'

javascript - 将字符串数组映射到 Select2 中的结果

java - 访问循环中返回的对象

javascript - 两个对象和一个 bool 值之间的复杂过滤器

.NET 程序集差异/比较工具 - 有什么可用的?

svn - Tortoise SVN 不同结构版本之间的差异

git - libchromiumcontent创建补丁文件

javascript - 容器中的一个 div,其背景可以延伸到无穷大

javascript - 在同一页面上 react 路由器渲染组件

python - 在不调用 __init__ 方法的情况下使用 python 类?