我有两个对象:
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/