我是JavaScript的新手,正在尝试查找两个JSON对象之间的区别。JSON对象及其数据的结构如下所示。我在线获得了一个代码,该代码适用于普通的JSON对象,但是由于它也具有数据数组,因此我认为它不起作用。我尝试了其他事情,但没有结果。如果您对此有指点,将不胜感激。谢谢。
JSON对象1(obj1): {id: 1, details: Array[2], profession: "Business"}
{
"id": "1",
"details": [{
"name": "Peter",
"address": "Arizona",
"phone": 9900998899
},
{
"name": "Jam",
"address": "Kentucky",
"phone": 56034033343
}
],
"profession": "Business"
}
Run Code Online (Sandbox Code Playgroud)
JSON对象2(obj2): {id: 2, details: Array[2], profession: "Business"}
{
"id": "2",
"details": [{
"name": "Peter",
"address": "Arizona",
"phone": 9900998899
},
{
"name": "David",
"address": "Boston",
"phone": 434323434
}
],
"profession": "Business"
}
Run Code Online (Sandbox Code Playgroud)
解:
compare(obj1, obj2) {
var result = {};
for (key in obj1) {
if (obj2[key] != obj1[key]) {
result[key] = obj2[key];
}
if (typeof obj2[key] === '[object Array]' && typeof obj1[key] === '[object Array]') {
result[key] = compare(obj1[key], obj2[key]);
}
if (typeof obj2[key] === 'object' && typeof obj1[key] === 'object') {
result[key] = compare(obj1[key], obj2[key]);
}
}
console.log(result);
}
Run Code Online (Sandbox Code Playgroud)
结果:
Object {0: undefined, 1: undefined}
Object {id: "2", pingedAddresses: undefined, type: "Business"}
Run Code Online (Sandbox Code Playgroud)
预期:
{
"id": "2",
"details": [{
"name": "David",
"address": "Boston",
"phone": 434323434
}]
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下简单比较:
注意:此答案假定结构完全相同。您可以以此为参考,并在结构不同的情况下使其更通用。
要考虑的要点:
o1.details有2个条目,o2.details有5个条目。function getDifference(o1, o2) {
var diff = {};
var tmp = null;
if (JSON.stringify(o1) === JSON.stringify(o2)) return;
for (var k in o1) {
if (Array.isArray(o1[k]) && Array.isArray(o2[k])) {
tmp = o1[k].reduce(function(p, c, i) {
var _t = getDifference(c, o2[k][i]);
if (_t)
p.push(_t);
return p;
}, []);
if (Object.keys(tmp).length > 0)
diff[k] = tmp;
} else if (typeof(o1[k]) === "object" && typeof(o2[k]) === "object") {
tmp = getDifference(o1[k], o2[k]);
if (tmp && Object.keys(tmp) > 0)
diff[k] = tmp;
} else if (o1[k] !== o2[k]) {
diff[k] = o2[k]
}
}
return diff;
}
var o1={id:"1",details:[{name:"Peter",address:"Arizona",phone:9900998899},{name:"Jam",address:"Kentucky",phone:56034033343}],profession:"Business"},
o2={id:"2",details:[{name:"Peter",address:"Arizona",phone:9900998899},{name:"David",address:"Boston",phone:434323434}],profession:"Business"};
var d = getDifference(o1, o2)
console.log(d)Run Code Online (Sandbox Code Playgroud)
我写了一个答案来检测物体的变化。您甚至还可以从中获取参考。
| 归档时间: |
|
| 查看次数: |
2711 次 |
| 最近记录: |