javascript - 查找对象键之间的差异

标签 javascript difference

假设我有两个具有相似结构的对象。如何找到第一个对象中未包含在第二个对象中的所有键,反之亦然?

例如我有两个对象:

const foo = {
  foo: 'foo',
  bar: {
    baz: 'baz',
    qux: 'qux'
  }
};

const bar = {
  foo: 'foo',
  bar: {
    baz: 'baz',
    quux: 'quux'
  },
  corge: 'corge'
};

不同的属性是:foo.bar.quxbar.bar.quuxbar.corge。找到他们的最佳方式是什么?

最佳答案

一种方法是创建一个递归函数,深度迭代第一个对象的属性,记住当前属性的路径,并调查第二个对象中是否存在具有此类路径的属性。

已经有一个tool为这个案例而写的。只需安装它即可:

npm install keys-diff

并像这样使用它:

import keysDiff from 'keys-diff'
const foo = {
  foo: 'foo',
  bar: {
    baz: 'baz',
    qux: 'qux'
  }
};

const bar = {
  foo: 'foo',
  bar: {
    baz: 'baz',
    quux: 'quux'
  },
  corge: 'corge'
};

keysDiff(foo, bar);

结果应该是:

[ 
  [ 
    [ 'bar', 'qux' ] 
   ], 
   [ 
     [ 'bar', 'quux' ], 
     [ 'corge' ] 
   ] 
]

关于javascript - 查找对象键之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39905178/

相关文章:

javascript - 如何从输入类型 ="text"的附加文件中获取名称和扩展名

javascript - d3 reduce 方法返回 NaN

perl - 读取两个 YAML 文件并比较两者中出现的模块

cmake - 包与库

php - 同一张表,按类型最大日期分组,2 行差异

numpy - 两个 numpy 数组的平均绝对差

javascript - 关联数组上的删除与拼接

javascript - 为什么没有记录我的 Google Analytics 自定义变量?

javascript - 在循环语句之外继续(在 some() 中)

Java Enum<T> 与 T 作为变量类型