我想合并两个相似但不相同的对象,并在其中一个对象中覆盖空值(如果存在)。例如,我有这两个对象:
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)
最佳答案
您还可以与 ES6 destructuring 混合搭配和 lodash _.omitBy
:
const obj1 = { a: 1, b: '', c: [], d: null }
const obj2 = { a: 2, b: null, d: 1 }
const result = {..._.omitBy(obj1, _.isNull), ..._.omitBy(obj2, _.isNull)}
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
你也可以像这样用 ES6 做到这一点:
const obj1 = { a: 1, b: '', c: [], d: null }
const obj2 = { a: 2, b: null, d: 1 }
let omitNull = obj => {
Object.keys(obj).filter(k => obj[k] === null).forEach(k => delete(obj[k]))
return obj
}
const result = { ...omitNull(obj1), ...omitNull(obj2) }
console.log(result)
关于javascript - 如何合并两个对象,覆盖空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56188121/