如何合并两个对象,覆盖空值?

2022-03-09 00:00:00 merge javascript lodash

我希望合并两个相似但不相同的对象,并覆盖其中一个对象中的空值(如果存在)。例如,我有这两个对象:

const obj1 = {
    a: 1,
    b: '',
    c: [],
    d: null
}

const obj2 = {
    a: 2,
    b: null,
    d: 1
}

合并的效果应该是:

const objMerged = {
    a: 2,
    b: '',
    c: [],
    d: 1
}

换句话说,合并对象中最重要的数据源是obj2,但它缺少来自obj1的一些属性,因此需要复制它们,而且一些obj2值是null,因此它们也应该取自obj1

编辑 我已尝试:

_.extend({}, obj1, obj2) 

Object.assign({}, obj1, obj2)

解决方案

可以使用_.mergeWith(),合并回调中只取不是null的第二个值:

const obj1 = { a: 1, b: '', c: [], d: null }
const obj2 = { a: 2, b: null, d: 1 }

const result = _.mergeWith({}, obj1, obj2, (o, s) => _.isNull(s) ? o : s)

console.log(result)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.11/lodash.min.js"></script>

相关文章