【问题标题】:Update item in objects array based on object property [duplicate]基于对象属性更新对象数组中的项目[重复]
【发布时间】:2020-02-20 03:02:04
【问题描述】:

我有一个具有以下结构的对象数组,如何根据其中一个对象属性 (name) 更新对象的数据 (file)? 例如,如何使用新的 file 对象更新名为:test1 的对象?

我已经尝试过了,但是没有更新正确的对象,而是将一个新对象推送到数组中,我做错了什么?

const [files, setFiles] = useState(fileArr)

const setFile = (name, data) => {
  setFiles(files => ({...files, [name]: {...files[name], ...data}}))
}

fileArr数组:

const fileArr= [
  {
    name: 'test1',
    status: 'Required',
    file: {}
  },
  {
    name: 'test2',
    status: 'Required',
    file: {}
  },
  {
    name: 'test3',
    status: 'Required',
    file: {}
  }
]

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    假设如下结构

    const fileArr= [
      {
        name: 'test1',
        status: 'Required',
        file: {}
      },
      {
        name: 'test2',
        status: 'Required',
        file: {}
      },
      {
        name: 'test3',
        status: 'Required',
        file: {}
      }
    ]
    

    根据name更新对象替换file的正确方法是

    const onChange = (name, data) =>{
        setItems(items => items.map(item =>{
            if(item.name === name)
                //assuming you want to spread instead of overwrite 'file'
                return {...item, file:{...item.file, ...data}}
    
            return item
        }))
    }
    

    您还使用fileList 初始化您的状态,这取决于您尝试更新的方式是object,但您发布了fileArr 作为您的数据结构。所以我假设你想在fileArr而不是fileList中执行你的操作(我不知道它是什么样子的)

    【讨论】:

      猜你喜欢
      • 2021-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-03-13
      • 2018-07-29
      • 2016-11-02
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      相关资源
      最近更新 更多