使用javascript es6更新对象数组

使用javascript es6更新对象数组,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,除了下面的代码外,还有其他方法在对象数组中写入更新项吗 const updateTodo = (list, updated) => { const index = list.findIndex(item => item.id === update.id) return [ ...list.slice(0,index), updated, ...list.slice(index+1) ] } 等等,上述功能是否正常工作 你做得太多了。如果知道索引,

除了下面的代码外,还有其他方法在对象数组中写入更新项吗

const updateTodo = (list, updated) => {
   const index = list.findIndex(item => item.id === update.id)
   return [
   ...list.slice(0,index),
   updated,
   ...list.slice(index+1)
   ]
}

等等,上述功能是否正常工作

你做得太多了。如果知道索引,则无需操作数组

const items = [{id: 1, value: 1}, {id: 2, value: 2}, {id: 3, value: 3}];
items[2] = {id: 4, value: 4};
console.log(items); //last element changed
如果不担心副作用,请在

const items = [{id: 1, value: 1}, {id: 2, value: 2}, {id: 3, value: 3}];
const copy = items.slice();
copy[2] = {id: 4, value: 4};
return copy;

你做这件事的方式是正确的。但是它不适用于您,因为在您的情况下,
updated
是一个数组而不是一个对象,因此您只需要访问数组第一个元素的
id

const updateTodo = (list, updated) => {

   const index = list.findIndex(item => return item.id === updated[0].id)

   return [
   ...list.slice(0,index),
   updated[0],
   ...list.slice(index+1)
   ]
}

然而,我更喜欢库
不变性助手
对数据执行任何更新,您可以这样做

import update from 'immutability-helper';
const updateTodo = (list, updated) => {
const index = list.findIndex(item => return item.id === updated[0].id)
   return update(list, {
        [index]: {
              $set: updated[0];
        }

   })
}
使用
immutabilty helper
的一个优点是,当数据高度嵌套时,它提供了更多的控制

更新(添加/删除)数组的最简单方法是使用拼接方法

它将第一个参数作为索引,第二个参数作为要删除的元素的数量,并将下一个参数作为加法的参数