首页 > 解决方案 > 如何更改对象?

问题描述

如何使用点差更改对象?

export const list = [
    {
        id: 0,
        tableName: 'example',
        tasks: [
            {
                task_id: 0, 
                task_short: 'lorem',
                task_full: 'lorem ipsum lorem ipsum lorem ipsum',
                time_created: null,
                time_changed: null, 
            },
            {
                task_id: 1, 
                task_short: 'andsf',
                task_full: 'lorem ipsum tes tes est',
                time_created: null,
                time_changed: null, 
            }
        ]
    }
]

在我的有效载荷中具有三个属性

case 'CHANGE_TASK':
        ///////update, ownId, parentId

例如,在更新中,我更改了任务 [0]

之后我无法解决如何更改和返回列表

标签: javascriptarraysreactjsobjectredux

解决方案


您可以执行以下操作来实现您正在寻找的东西。

但我可以保证这不是最佳做法,

保持你的状态正常化,不要嵌套对象。

const list = [{
  id: 0,
  tableName: 'example',
  tasks: [{
      task_id: 0,
      task_short: 'lorem',
      task_full: 'lorem ipsum lorem ipsum lorem ipsum',
      time_created: null,
      time_changed: null,
    },
    {
      task_id: 1,
      task_short: 'andsf',
      task_full: 'lorem ipsum tes tes est',
      time_created: null,
      time_changed: null,
    }
  ]
}]

const parentId = 0;

const ownId = 1;

const update = {
  task_short: 'Updated andsf',
  task_full: 'Updated lorem ipsum tes tes est',
}

const newList = list.map(item => {
  if (item.id === parentId) {
    return {
      ...item,
      tasks: item.tasks.map(task => {
        if (task.task_id === ownId) {
          return {
            ...task,
            ...update,
          }
        }
        return task;
      })
    }
  }
  return item;
})

console.log(newList)


推荐阅读