【问题标题】:Javascript remove object keys that are not in both objects with Lodash?Javascript使用Lodash删除不在两个对象中的对象键?
【发布时间】:2021-11-09 15:56:52
【问题描述】:

所以,我有这两个对象:

const obj1 = {
  foo: 'Foo',
  bar: {
    baz: 'Baz',
  }
}

const obj2 = {
  foo: 'Foo',
  bar: {
    baz: 'Baz',
    zip: 'Zip'
  },
}

我想从 obj2 中删除“zip”,因为它不在 obj1 中。有没有办法用 lodash 做到这一点?

编辑:如果一个属性是一个对象,那么它将是它们两者中的一个对象。不能有一个字符串与另一个对象的键相同。

用例是,我有一个翻译文件,经过一些处理,我需要删除不再需要的文件。因此,如果我在原始对象(即 obj1)中删除它们,则必须将它们从其他对象中删除(在本例中为 obj2。

【问题讨论】:

  • 您是否只想将字段过滤为obj1 中可用的内容?例如obj1 = {a: 1, b: 2}obj2 = {a: 1, c: 3} 只会删除c。还有,是不是需要在对象的每一层都做?
  • 如果有嵌套对象,你如何处理不匹配的结构?喜欢obj1 = { bar: "bar" }obj2 = { bar: { baz: "baz"} }。作为一个普遍的问题,这不是微不足道的。这个问题的具体背景是什么?你的实际问题是什么?
  • 我刚刚更新了问题来回答你的问题,抱歉之前的歧义
  • 编辑没有解决嵌套对象的问题。
  • 确实如此,您不能用字符串代替对象。如果原件有字符串,则 obj2 要么有字符串,要么什么都没有。

标签: javascript lodash


【解决方案1】:

如果您愿意使用其他库,我建议您查看deep-diff

const obj1 = {
  foo: 'Foo',
  bar: {
    baz: 'Baz',
  }
}

const obj2 = {
  foo: 'Foo',
  bar: {
    baz: 'Baz',
    zip: 'Zip'
  },
}

DeepDiff.observableDiff(obj2, obj1, d => {
  DeepDiff.applyChange(obj2, obj1, d)
});

console.log(obj1)
console.log(obj2)
<script src="https://cdn.jsdelivr.net/npm/deep-diff@1/dist/deep-diff.min.js"></script>

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 2018-04-20
    • 2016-01-03
    • 1970-01-01
    • 2020-10-30
    • 2017-03-12
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    相关资源
    最近更新 更多