function merger(objValue, srcValue, key, object, source, stack) {
switch (key) {
case 'keya':
case 'keyb':
case 'keyc':
return null
}
}
mergeWith({}, oldObj, newObj, merger)
当key等于某个值时,我想跳过合并。但是,当{keya: null}
具有newObj
时,上述代码的输出将具有keya
的输出。
我可以跳过合并,以便密钥不在输出中吗?
答案 0 :(得分:1)
简单回答: _.mergeWith
无法实现。
您可以在此处查看https://github.com/lodash/lodash/issues/2966。您必须使用其他进程再次删除null
值的属性。像,
_.omitBy(mergedObj, _.isNull);
答案 1 :(得分:0)
完全可以这样做:
"#{}"
答案 2 :(得分:0)
这里的an implementation of omitDeep将忽略在对象结构中任何地方传递谓词的键/值。
function omitDeep(value, predicate = (val) => !val) {
return _.cloneDeepWith(value, makeOmittingCloneDeepCustomizer(predicate))
}
function makeOmittingCloneDeepCustomizer(predicate) {
return function omittingCloneDeepCustomizer(value, key, object, stack) {
if (_.isObject(value)) {
if (_.isArray(value)) {
return _(value).reject(predicate).map(item => _.cloneDeepWith(item, omittingCloneDeepCustomizer))
}
const clone = {}
for (const subKey of Object.keys(value)) {
if (!predicate(value[subKey])) {
clone[subKey] = _.cloneDeepWith(value[subKey], omittingCloneDeepCustomizer)
}
}
return clone
}
return undefined
}
}