是否有一个lodash函数来合并两个对象并删除其中一个对象的属性,如果它们不存在于另一个对象中?

时间:2016-04-05 09:49:14

标签: javascript lodash

考虑以下两个对象:

const source = {
  foo: 'value',
  bar: 'value',
  baz: 'value'
};

const pattern = {
  foo: '',
  bar: ''
};

_.fn(source, pattern); // { foo: 'value', bar: 'value' }

在这个例子中' baz'属性被删除,因为它不存在于模式中。

3 个答案:

答案 0 :(得分:5)

_。选择可以帮助

_.pick(source,Object.keys(pattern))

答案 1 :(得分:3)

如果你想改变原始source对象以删除内联键而不是返回一个新对象,你可以这样做:

_.difference(_.keys(source), _.keys(pattern)).forEach(k => delete source[k])

或者只是简单的JS:

Object.keys(source)
  .filter(k => Object.keys(pattern).includes(k))
  .forEach(k => delete source[k])

我通常设计不变性,但是如果你想避免分配新对象的开销,或者你有很多基元需要按值复制到新对象,这种方法可能会有用。

答案 2 :(得分:0)

你可以做的是,寻找两个对象的交集:

var a = { 'a': 1, 'b': 2, 'c': 3 };
var b = { 'c': 3, 'd': 4, 'e': 5 };

_.intersection(_.keys(a), _.keys(b)); // ['c']