是否有 lodash 函数可以合并两个对象并删除其中一个对象的属性(如果它们不存在于另一个对象中)?
Is there a lodash function to merge two objects and delete properties of one of them if they don't exist in the other?
考虑以下两个对象:
const source = {
foo: 'value',
bar: 'value',
baz: 'value'
};
const pattern = {
foo: '',
bar: ''
};
_.fn(source, pattern); // { foo: 'value', bar: 'value' }
在此示例中,'baz' 属性 被删除,因为它不存在于模式中。
_.pick 可以帮忙
_.pick(source,Object.keys(pattern))
您还可以做的是寻找这两个对象的交集:
var a = { 'a': 1, 'b': 2, 'c': 3 };
var b = { 'c': 3, 'd': 4, 'e': 5 };
_.intersection(_.keys(a), _.keys(b)); // ['c']
如果您想改变原始 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])
我通常设计不变性,但如果您想避免分配新对象的开销,或者您有很多需要按值复制到新对象的原语,这种方法可能会有用。
考虑以下两个对象:
const source = {
foo: 'value',
bar: 'value',
baz: 'value'
};
const pattern = {
foo: '',
bar: ''
};
_.fn(source, pattern); // { foo: 'value', bar: 'value' }
在此示例中,'baz' 属性 被删除,因为它不存在于模式中。
_.pick 可以帮忙
_.pick(source,Object.keys(pattern))
您还可以做的是寻找这两个对象的交集:
var a = { 'a': 1, 'b': 2, 'c': 3 };
var b = { 'c': 3, 'd': 4, 'e': 5 };
_.intersection(_.keys(a), _.keys(b)); // ['c']
如果您想改变原始 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])
我通常设计不变性,但如果您想避免分配新对象的开销,或者您有很多需要按值复制到新对象的原语,这种方法可能会有用。