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

标签 javascript merge 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)

最佳答案

您还可以与 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/

相关文章:

javascript - 将方法添加到字符串类

javascript - Bootstrap -btn 组,数据切换 ="buttons": how to select a button with JS and deselect all others?

javascript - BST 日期字符串到 javascript 日期

javascript - 使用 Lodash 根据值从 json 获取对象

javascript - 按日期对记录进行排序,然后使用 lodash 对计数进行着色和聚合

javascript - 如何使用 office.js 检查未保存文件的具体文件扩展名

r - 如何合并 column1 是 column2 的子字符串的数据框

javascript - jsPDF - 包含其他 pdf

git - Recursive Three-Way Merge算法有哪些突出问题?

javascript - 如何在与 lodash 的 react 中消除事件处理程序的反跳?