JS对象比较和获取diff



我有两个对象

一个对象是Original Data

const origin = { name: 'John', id: 'Doe', item: { drink: 'coffee', money: 0 } }

另一个对象是Copied and Edited Data

const copied = { name: 'Alex', id: 'Doe', item: { drink: 'water', money: 0 } }

我想比较它们,只得到不同的。

const out = compareObj(origin, copied);
console.log(out)
/*
{ name: 'Alex', item: { drink: 'water' } }
*/

我怎样才能得到这个?

提前感谢。

您可以在对象和delete上递归地循环copy对象的不重复属性。

如果在original对象上存在属性,而在copy上不存在,则将其添加到copy对象中。下面的代码是这样做的:

if (!copy.hasOwnProperty(k)) {
copy[k] = v;
}

function compare(original, copy) {
for (let [k, v] of Object.entries(original)) {
if (typeof v === "object" && v !== null) {
if (!copy.hasOwnProperty(k)) {
copy[k] = v;
} else {
compare(v, copy?.[k]);
}
} else {
if (Object.is(v, copy?.[k])) {
delete copy?.[k];
}
}
}
return copy;
}
const 
original = { name: "John", id: "Doe", item: { drink: "coffee", money: 0, honey: 24 } },
copy = { name: "Alex", id: "Doe", item: { drink: "water", money: 0 } },
diff = compare(original, JSON.parse(JSON.stringify(copy)));
console.log(diff);

注意:您需要将copy对象的克隆传递给函数,因为它会改变传递的copy对象。

最新更新