如何用JavaScript将两个前端对象进行深度比较,区分出不同的键值对并将相同的键值对放入新的对象中?
时间: 2024-11-06 17:18:46 浏览: 5
在JavaScript中,你可以使用递归函数以及`Object.entries()`、`JSON.stringify()`等方法来进行对象的深度比较。下面是一个简单的示例,它创建了一个新对象,只包含两个输入对象的不同键值对:
```javascript
function deepCompare(objA, objB) {
const result = {};
function compareObjects(obj, newObj, keys) {
keys = keys || [];
Object.entries(obj).forEach(([key, value]) => {
if (typeof value === 'object' && value !== null) { // 如果遇到嵌套的对象
if (!newObj[key] || !compareObjects(value, newObj[key], [...keys, key])) { // 深度比较
newObj[key] = value;
}
} else if (obj.hasOwnProperty(key) && newObj[key] !== value) { // 如果键值不同
newObj[key] = value; // 将新值添加到结果对象中
}
// 添加当前键到已比较的键数组中,防止无限循环
keys.push(key);
});
return newObj;
}
return compareObjects(objA, result);
}
// 使用示例
const objA = { a: 1, b: { c: 2 }, d: 3 };
const objB = { a: 1, b: { c: 4 }, e: 5 };
const diffObject = deepCompare(objA, objB);
console.log(diffObject); // 输出 { b: { c: 4 }, e: 5 }
阅读全文