我正在尝试使用Object.assign()
var state = {
items: [{
id: "Harko",
name: "Haris"
},
{
id: "Benko",
name: "Benjo"
}]
}
var a = {
id: "Benko",
name: "Bengalka"
}
我已经尝试过了:
Object.assign(state.items,a);
Object.assign({}, { items: [state.items,a]);
我想得的是以下内容:
{
items: [{
id: "Harko",
name: "Haris"
},
{
id: "Benko",
name: "Bengalka"
}]
}
所以我希望var的状态中具有id“Benko”的对象被var a覆盖,因为它们具有相同的id。
Object.assign可以实现吗?
任何形式的帮助将不胜感激。
由于
答案 0 :(得分:5)
您无法使用Object.assign
在顶层执行此操作。您需要先做的是find对象引用,然后您可以使用Object.assign
来更新它的属性:
const state = {
items: [{
id: "Harko",
name: "Haris"
},
{
id: "Benko",
name: "Benjo"
}]
}
const a = {
id: "Benko",
name: "Bengalka"
}
const foundObject = state.items.find(obj => obj.id === a.id);
Object.assign(foundObject, a);
console.log(state);

答案 1 :(得分:0)
Lodash merge()适用于我的用例:
let v = {foo: [{change: "first", leave: "here"}]}
_.merge(v, {foo: [{change: "second"}]})
合并后的v值:
{ foo: [{change: "second", leave: "here"}]
与Object.assign()比较,它将第二个替换数组中的第一个项目:
Object.assign(v, {foo: [{change: "second"}]})
之后的v的值(缺少左道具):
{ foo: [{change: "second"}] }