乐闻世界logo
搜索文章和话题

How do I merge two objects while omitting null values with lodash

4 个月前提问
3 个月前修改
浏览次数38

1个答案

1

在使用 Lodash 合并两个对象的时候,我们通常会使用 _.merge 或者 _.assign 方法来实现对象的合并。但是,如果要在合并的过程中省略掉 null 值,我们需要稍微调整一下方法或者使用一些额外的逻辑。

方法 1: 使用 _.mergeWith 自定义合并规则

Lodash 提供了一个 _.mergeWith 函数,它允许我们自定义合并时的行为。我们可以利用这个函数来在合并过程中检查值是否为 null,如果是,则忽略这个值。

javascript
import _ from 'lodash'; const objectA = { a: 1, b: null, c: 3 }; const objectB = { a: null, b: 2, d: 4 }; const customizer = (objValue, srcValue) => { if (srcValue === null) { return objValue; } } const result = _.mergeWith({}, objectA, objectB, customizer); console.log(result); // 输出:{ a: 1, b: 2, c: 3, d: 4 }

在这个例子中,customizer 函数检查源对象中的值,如果是 null,则返回目标对象的值,这样就可以确保不会将 null 值覆盖到结果对象中。

方法 2: 先过滤对象,再合并

另一种方法是在合并之前先过滤掉所有值为 null 的属性。我们可以使用 _.omitBy 来实现这一点,然后再用 _.merge_.assign 合并已经过滤的对象。

javascript
import _ from 'lodash'; const objectA = { a: 1, b: null, c: 3 }; const objectB = { a: null, b: 2, d: 4 }; const cleanObjectA = _.omitBy(objectA, _.isNull); const cleanObjectB = _.omitBy(objectB, _.isNull); const result = _.merge(cleanObjectA, cleanObjectB); console.log(result); // 输出:{ a: 1, b: 2, c: 3, d: 4 }

这种方法首先清除了每个对象中所有值为 null 的键,然后再进行合并。这样可以确保不会将任何 null 值合并到最终的对象中。

总结

根据具体情况选择合适的方法,如果需要更灵活地处理合并规则(例如处理不只是 null,可能还有其他特殊值需要特殊处理),使用 _.mergeWith 是一个很好的选择。如果只是简单地忽略 null 值,使用过滤再合并的方法可能更直接简单一些。

2024年6月29日 12:07 回复

你的答案