nor*_*orr 5 javascript ecmascript-6 lodash
我有两个对象:
let first = {
a: 'John',
b: 22,
c: 'example'
}
let second = {
b: 55,
d: 'demo'
}
Run Code Online (Sandbox Code Playgroud)
我只想将第二个对象中已有的项目替换为第一个对象。结果应如下所示(因此仅应更改 b 项,并忽略新的 d 项):
{
a: 'John',
b: 55, // changed
c: 'example'
}
Run Code Online (Sandbox Code Playgroud)
合并将不起作用,因为它还会添加新项目。我可以使用 foreach 但我相信对此应该有一个简短的答案。我已经在我的项目中使用了 lodash,所以我可以使用那里的函数,但我找不到任何用于此目的的函数。有没有?
_.merge使用 lodash,您可以使用,_.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)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
使用 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)Run Code Online (Sandbox Code Playgroud)
这假设您不想要mutate任何对象。如果你不关心:
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)Run Code Online (Sandbox Code Playgroud)