不可变地更新对象列表中的对象列表

Updating a list of objects in a list of objects immutably

我有一个要求,我将从 Axios 调用中获取需要在 redux 存储中更新的对象列表。

例如,假设我有一个这样的初始状态。

const initialState = {

someData: [

  {
    id: 1,
    data: 'some data',
    ...
    chosen: true,
    user:'Joe'
  },
  {
    id: 2,
    data: 'some data',
    ...
    chosen: false,
    user:null
  },
  {
    id: 3,
    data: 'some data',
    ...
    chosen: false,
    user:null
  },
  {
    id: 4,
    data: 'some data',
    ...
    chosen: true,
    user:'Jacob'
  },
  {
    id: 5,
    data: 'some data',
    ...
    chosen: false,
    user:null
  }

]

}


通过 Axios 调用,我将获得商店中需要更新的对象列表。

接收到的对象列表的示例数据:

[

  {
    id: 2,
    data: 'some data',
    ...
    chosen: true,
    user:'Jake'
  },
  {
    id: 3,
    data: 'some data',
    ...
    chosen: true,
    user:'Logan'
  },
  {
    id: 5,
    data: 'some data',
    ...
    chosen: true,
    user:'Felix'
  }
]

我想用对象数组 chosen[更新初始状态下的 chosenuser 字段=26=] 和 user,这是我在 Axios 调用中收到的。我在考虑一种逻辑,我可以将接收到的对象的 ID 与状态的对象 ID 进行比较。如果它们相等,我将更新选择的和用户(使用扩展运算符),否则我将只 return 状态的对象。我不确定如何映射状态或接收到的对象列表并比较 ID。请有人帮我解决这个逻辑。

return {
      ...state,
      someData: state.someData.map(item => {
        const replaceWith = updatedData.find(
          updatedItem => item.id === updatedItem.id
        );
        return replaceWith
          ? { ...item, chosen: replaceWith.chosen, user: replaceWith.user }
          : item;
      })
    };