【问题标题】:How to replace an object of a javascript array如何替换javascript数组的对象
【发布时间】:2021-08-14 13:40:12
【问题描述】:

我正在尝试更新数组的特定对象值。所以我的做法是删除旧对象,并在同一个索引中插入更新值。

      let thisTodoIndex = oldTodos.findIndex((t) => t.id === getTodoId);
  let thisTodo = oldTodos[thisTodoIndex];

  thisTodo = { ...thisTodo, isCompleted: !getStatus };

  let updatedTodo = oldTodos.filter(td => td.id !== getTodoId);
  console.log(updatedTodo); // working fine
  console.log(thisTodo); // working fine
  console.log(thisTodoIndex); //working fine
  updatedTodo = updatedTodo.splice(thisTodoIndex,0,thisTodo); // becoming empty

  console.log(updatedTodo);

参考阵列的图像:

【问题讨论】:

  • .splice() 方法返回一个包含已删除元素的数组,因为您的删除计数为0,您将得到一个空数组。相反,splice() 修改了 updatedTodo,而不是返回一个新修改的数组。

标签: javascript arrays


【解决方案1】:

你可以更新对象而不删除它,例如:

const oldTodos = [
  {
    id: 1,
    todoText: "Create",
    inComplete: false
  },
  {
    id: 2,
    todoText: "Create",
    inComplete: true
  },
]

const getTodoId = 1

const index = oldTodos.findIndex( _ => _.id == getTodoId)

oldTodos[index] = {
  ...oldTodos[index],
  todoText: "New Text"
}

console.log(oldTodos)

【讨论】:

    【解决方案2】:

    我做错了。

      console.log(thisTodoIndex); //working fine
      updatedTodo.splice(thisTodoIndex,0,thisTodo);
    
      console.log(updatedTodo);
    

    我将updatedTodo.splice(thisTodoIndex,0,thisTodo) 存储在一个变量中,然后我将其返回。现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 2020-10-19
      • 2021-12-20
      相关资源
      最近更新 更多