因为我的代码需要运行很多次,所以我需要一个非常快的代码来获取两个对象之间的差异。已删除的属性应具有“已删除”值。
示例:
对象1
{a: "hi", b: "hi", c: {o: "hi", p: "hi",}, d: ["hi", "bye"]}
对象2
{a: "hi", b: "bye", c: {o: "bye",}}
结果
{b: "bye", c: {o: "bye", p: "deleted"}, d: "deleted"}
您可以使用一些递归函数来处理对象。不清楚是否也需要处理数组
const old = {a: "hi", b: "hi", c: {o: "hi", p: "hi",}, d: ["hi", "bye"]}
const cur = {a: "hi", b: "bye", c: {o: "bye",}};
const diff = (old, cur, result = {}) => {
for(const k in old){
if(!Object.is(old[k], cur[k])){
if(k in cur){
if(cur[k].__proto__.constructor.name === 'Object'){
diff(old[k], cur[k], result[k] = {});
} else {
result[k] = cur[k];
}
} else {
result[k] = 'deleted';
}
}
}
return result;
};
console.log(diff(old, cur));