javascript - 纯 JS 或 Lodash - 用其他对象的值替换对象值

标签 javascript ecmascript-6 lodash

我有两个对象:

let first = {
   a: 'John',
   b: 22,
   c: 'example'
}

let second = {
   b: 55,
   d: 'demo'
}

我只想将第二个对象中的现有项目替换为第一个对象。结果应该是这样的(所以只有 b 项应该改变,新的 d 项被忽略):

{
   a: 'John',
   b: 55, // changed
   c: 'example'
}

合并将不起作用,因为它还会添加新项目。 我可以使用 foreach,但我相信对此应该有简短的回答。我已经在我的项目中使用了 lodash,所以我可以从那里使用函数,但我找不到任何用于此目的的函数。有吗?

最佳答案

使用 lodash,你可以使用 _.merge_.pick_.keys 做这样的事情:

let first = {
   a: 'John',
   b: 22,
   c: 'example'
}, second = {
   b: 55,
   d: 'demo'
}

let result = _.merge(first, _.pick(second, _.keys(first)))

console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

在 ES6 中你可以使用 Object.keys然后 Array.forEach在这样的新对象上:

let first = {
   a: 'John',
   b: 22,
   c: 'example'
}, second = {
   b: 55,
   d: 'demo'
}, result = new Object(null)

Object.keys(first).forEach(k => result[k] = second[k] || first[k])

console.log(result)

假设您不想改变任何对象。如果您不在乎:

let first = {
   a: 'John',
   b: 22,
   c: 'example'
}, second = {
   b: 55,
   d: 'demo'
}

Object.keys(first).forEach(k => first[k] = second[k] || first[k])

console.log(first)

关于javascript - 纯 JS 或 Lodash - 用其他对象的值替换对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56677991/

相关文章:

javascript - 在 Javascript 中设置默认 DateTimeOffset

javascript - Controller 在 Ionic (AngularJS) 中被调用两次

javascript - AngularJS 中包含 HTML 的绑定(bind) Controller 属性

javascript - 在 JavaScript 中从 Firebase 中删除特定 Node

javascript - 浏览器如何知道我的目标是 ES6?

javascript - 仅使用 ReactJS 专注于自定义模式

javascript - 如何使用 ES6 Rest 添加方法到 JS 对象

javascript - lodash 从中删除对象

javascript - "pickBy"对象的值数组中的值

reactjs - 如何通过 React Hook 使用 throttle 或去抖?