Javascript 是否有lodash函数来合并两个对象并删除其中一个对象的属性(如果它们不');不存在于另一个世界?

Javascript 是否有lodash函数来合并两个对象并删除其中一个对象的属性(如果它们不');不存在于另一个世界?,javascript,lodash,Javascript,Lodash,考虑以下两个对象: const source = { foo: 'value', bar: 'value', baz: 'value' }; const pattern = { foo: '', bar: '' }; _.fn(source, pattern); // { foo: 'value', bar: 'value' } var a = { 'a': 1, 'b': 2, 'c': 3 }; var b = { 'c': 3, 'd': 4, 'e': 5 };

考虑以下两个对象:

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

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

_.fn(source, pattern); // { foo: 'value', bar: 'value' }
var a = { 'a': 1, 'b': 2, 'c': 3 };
var b = { 'c': 3, 'd': 4, 'e': 5 };

_.intersection(_.keys(a), _.keys(b)); // ['c']
在本例中,“baz”属性被删除,因为它在模式中不存在。

\u拾取有帮助

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

您还可以做的是查找这两个对象的交点:

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

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

_.fn(source, pattern); // { foo: 'value', bar: 'value' }
var a = { 'a': 1, 'b': 2, 'c': 3 };
var b = { 'c': 3, 'd': 4, 'e': 5 };

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

如果要对原始
对象进行变异以进行内联键删除,而不是返回新对象,可以执行以下操作:

_.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])

我通常是为不变性而设计的,但是如果您希望避免分配新对象的开销,或者您有许多原语需要按值复制到新对象,那么这种方法可能会很有用。

pick
使用这些属性创建新对象。如果要从原始对象中删除缺少的属性,该怎么办?