使用Object.assign将对象数组与对象合并

Har*_*vic 4 ecmascript-6

我正在尝试合并使用对象的对象数组 Object.assign()

var state = {
    items: [{
       id: "Harko",
       name: "Haris"
    },
    {
      id: "Benko",
      name: "Benjo"
    }]

}

var a = {
    id: "Benko",
    name: "Bengalka"
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试过了:

Object.assign(state.items,a);
Object.assign({}, { items: [state.items,a]);
Run Code Online (Sandbox Code Playgroud)

我想得到的是以下内容:

{
    items: [{
       id: "Harko",
       name: "Haris"
    },
    {
      id: "Benko",
      name: "Bengalka"
    }]
}
Run Code Online (Sandbox Code Playgroud)

所以我希望var的状态中具有id"Benko"的对象被var a覆盖,因为它们具有相同的id.

Object.assign有可能吗?

任何形式的帮助将不胜感激.

谢谢

Cod*_*gue 7

你无法在顶层使用它Object.assign.您需要做的是首先找到对象引用,然后您可以使用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);
Run Code Online (Sandbox Code Playgroud)