这可能会让您入门。
警告:这依赖于固有危险的递归函数
注意:这不考虑对象 2 中不存在于对象 1 中的新键。
<script>
var o = {
a : 'boo',
b : 'loo',
c : 'noo',
d : 'fa',
e : 'da',
f : 'la',
g : {
a : 'woo',
b : 'loo'
},
h : {
a : {
a : false
},
b : {
d : false
}
}
}
var o2 = {
a : 'boom',
b : 'loom',
c : 'noo',
d : 'fad',
e : 'dad',
f : 'lad',
g : {
a : 'woom',
b : 'loo'
},
h : {
a : {},
},
g : false
}
function compare(o1, o2) {
function get_diff(ob1, ob2, k) {
var diff = {};
k = k || '';
for (var key in ob1) {
k = k + key;
if (typeof ob2 !== 'undefined' && typeof ob2 == 'object') {
if (typeof ob1[key] == "object") {
var t = get_diff(ob1[key], ob2[key], k);
if (t) {
diff[key] = t;
}
} else {
if (ob1[key] !== ob2[key]) {
diff[key] = { was : ob1[key], now : ob2[key] };
}
}
} else {
if (typeof ob2 == 'undefined') {
diff[key] = {was : ob1[key], now : undefined};
} else {
diff[key] = {was : ob1[key], now : ob2};
}
}
}
return diff;
}
return get_diff(o1, o2);
}
console.log(compare(o, o2));
</script>
输出:
{
"a":{
"was":"boo",
"now":"boom"
},
"b":{
"was":"loo",
"now":"loom"
},
"d":{
"was":"fa",
"now":"fad"
},
"e":{
"was":"da",
"now":"dad"
},
"f":{
"was":"la",
"now":"lad"
},
"g":{
"a":{
"was":"poo",
"now":false
},
"b":{
"was":"loo",
"now":false
}
},
"h":{
"a":{
"a":{
"was":false,
"now":undefined
}
},
"b":{
"d":{
"was":false
"now":undefined
}
}
}
}