首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Javascript -比较对象并在新对象中存储差异

Javascript -比较对象并在新对象中存储差异
EN

Stack Overflow用户
提问于 2018-08-27 06:04:16
回答 1查看 109关注 0票数 3

我将给出我的两个对象的简化版本,其中包含嵌套对象:

Object1:

代码语言:javascript
复制
{firstname: 'John', lastname: 'Cena', privateInfo: {privateProperty1: false, privateProperty2: true}}

Object2:

代码语言:javascript
复制
{firstname: 'John', middlename: 'Felix', lastname: 'Pina', privateInfo: {privateProperty1: true, privateProperty2: true} }

在比较了Object1和Object2之后,我希望将Object2拥有的所有不同属性存储在一个新对象中。在我的例子中,这将是:

代码语言:javascript
复制
let Object3 = {middlename: 'Felix', lastname: 'Pina', privateInfo: {privateProperty1: true}}

比较这些对象的所有属性(包括嵌套对象和缺少的对象)的最佳和最有效的方法是什么?

在我的例子中,一个对象的属性可以达到30-40。效率在这里非常重要。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-27 06:12:20

只需循环对象键并将它们与其他对象进行比较。由于可能存在嵌套对象,因此需要使用递归:

代码语言:javascript
复制
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;
}

示例:

代码语言:javascript
复制
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 object1 = {firstname: 'John', lastname: 'Cena', privateInfo: {privateProperty1: false, privateProperty2: true}};
var object2 = {firstname: 'John', middlename: 'Felix', lastname: 'Pina', privateInfo: {privateProperty1: true, privateProperty2: true} };

console.log(difference(object2, object1));

注意:如果嵌套的对象相同,则它们的差异将是一个空对象,这是符合逻辑的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52030564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档