You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何返回修改后的对象数组?splice返回旧元素问题排查

问题原因与解决方案

问题出在Array.splice()的返回值特性上:它不会返回修改后的原数组,而是返回被移除/替换掉的元素组成的数组——这就是你拿到旧对象的核心原因。而且splice是直接修改原数组currentTodos的,你把它的返回值赋值给updatedTodos,自然只会得到被替换掉的那个旧todo。

这里给你两种可行的解决方式:

方式一:遵循不可变数据原则(推荐)

用map生成全新的数组,原数组不会被修改,新数组就是替换后的结果:

async mutateTodos(currentTodos: ITodos[], editedTodo: ITodos) {
  const updatedTodos = currentTodos.map(todo => 
    todo.id === editedTodo.id ? editedTodo : todo
  );
  console.log(updatedTodos);
}

方式二:直接修改原数组(适合不需要保留原数组的场景)

调用splice修改原数组后,直接打印原数组currentTodos即可,不用接收splice的返回值:

async mutateTodos(currentTodos: ITodos[], editedTodo: ITodos) {
  const index = currentTodos.findIndex((el) => el.id === editedTodo.id);
  currentTodos.splice(index, 1, editedTodo);
  console.log(currentTodos);
}

内容的提问来源于stack exchange,提问作者WorldW1de

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 12:45:45