找到对象键之间的差异

时间:2016-10-06 20:35:05

标签: 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。找到它们的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

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

此案例已经写了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' ] 
   ] 
]