Javascript-比较对象并在新对象中存储差异
我将给出两个对象的简化版本,其中包含嵌套对象: 目标1:Javascript-比较对象并在新对象中存储差异,javascript,object,properties,compare,Javascript,Object,Properties,Compare,我将给出两个对象的简化版本,其中包含嵌套对象: 目标1: {firstname: 'John', lastname: 'Cena', privateInfo: {privateProperty1: false, privateProperty2: true}} 目标2: {firstname: 'John', middlename: 'Felix', lastname: 'Pina', privateInfo: {privateProperty1: true, privateProperty2
{firstname: 'John', lastname: 'Cena', privateInfo: {privateProperty1: false, privateProperty2: true}}
目标2:
{firstname: 'John', middlename: 'Felix', lastname: 'Pina', privateInfo: {privateProperty1: true, privateProperty2: true} }
在比较Object1和Object2之后,我想将Object2拥有的所有不同属性存储在一个新对象中。就我而言,这将是:
let Object3 = {middlename: 'Felix', lastname: 'Pina', privateInfo: {privateProperty1: true}}
比较这些对象(包括嵌套对象和缺少对象)的所有属性的最佳和最有效的方法是什么
在我的例子中,对象的属性可以达到30-40。效率在这里非常重要。只需在对象键上循环,并将它们与其他对象进行比较。由于可能存在嵌套对象,因此需要递归:
function difference(object, other) {
var diff = {};
for(var key in object) {
if(typeof object[key] === "object" && typeof other[key] === "object" && object[key] && other[key]) {
diff[key] = difference(object[key], other[key]);
} else if(object[key] !== other[key]) {
diff[key] = object[key];
}
}
return diff;
}
示例:
功能差异(对象、其他){
var diff={};
for(对象中的变量键){
if(对象的类型[键]==“对象”&&typeof其他[键]===“对象”&&object[键]&&other[键]){
diff[key]=差异(对象[key],其他[key]);
}else if(对象[键]!==其他[键]){
diff[key]=对象[key];
}
}
返回差;
}
var object1={firstname:'John',lastname:'Cena',privateInfo:{privateProperty1:false,privateProperty2:true}};
var object2={firstname:'John',middlename:'Felix',lastname:'Pina',privateInfo:{privateProperty1:true,privateProperty2:true};
log(差异(object2,object1))代码>MVP的可能副本。工作得很有魅力。谢谢你,先生!