久远的问题,贴一下 chatgpt 给出的答案:
可以使用 JSON.stringify() 方法将两个 JSON 对象转换为字符串,再使用 JSON.parse() 方法将字符串转回为对象,然后比较各个属性的值,得出差异。以下是一个简单的实现:
function diffJSON(json1, json2) {
let diff = {};
let keys = Object.keys(json1).concat(Object.keys(json2));
keys = Array.from(new Set(keys));
for (let key of keys) {
if (json1[key] !== json2[key]) {
if (typeof json1[key] !== \object\ || typeof json2[key] !== \object\ {
diff[key] = [json1[key], json2[key]];
} else {
diff[key] = diffJSON(json1[key], json2[key]);
}
}
}
return diff;
}
这个函数会返回两个 JSON 对象的差异,以一个新的 JSON 对象的形式表示。如果两个对象相同,返回的对象将为空对象 {}
。
示例用法:
const obj1 = { a: 1, b: 2, c: { d: 3, e: 4 } };
const obj = { a: 2, b: 2, c: { d: 3, e: 5 } };
const diff = diffJSON(obj1, obj2);
console.log); // 输出 { a: [1, 2], c: { e: [4, 5] } }
上面的例子中,两个 JSON 对象的 a
属性的值不同,c
属性的 e
子属性的值不同,因此差异对象中记录了这些差异。