【问题标题】:I have to edit only one property in a JS object, can I spread only a portion of a said object when passing it as an argument to a function?我只需要编辑 JS 对象中的一个属性,当将其作为参数传递给函数时,我可以只传播所述对象的一部分吗?
【发布时间】:2022-01-03 17:19:37
【问题描述】:

我有一个具有以下结构的 JavaScript 对象:

{
    id: 0,
    content: "English Class",
    date: "Dec 24th at 7:30pm",
    completed: false,
}

我还有一个函数const editTask(id, content) 可以更新上述对象中的content 属性:

const editTask = (id, content) => {
    setTasks(tasks.map((task) =>
      task.id === id ? { id: task.id, content: content, date: task.date, completed: task.completed } : task));
  }

有没有一种方法可以避免传递所有对象属性而只升级content属性以及传播对象的其余部分?

【问题讨论】:

  • { ...task, content }?
  • 你自己在问题中说的,只是传播。你怎么知道“传播”这个词和谷歌却不知道传播的语法?
  • @jonrsharpe 谢谢。我的印象是我只能将 spread 与“整个”完整的对象一起使用。
  • @Touffy 我知道语法,只是有点怀疑。
  • ...task 确实传播了整个完整的对象,然后使用速记符号覆盖其中的一部分。

标签: javascript arrays reactjs object


【解决方案1】:

一种常见的模式是将扩展语法与手动设置一些属性相结合:

const editTask = (id, content) => {
    setTasks(tasks.map((task) =>
      task.id === id ? { ...task, content } : task));
  }

在上面的示例中,展开语法设置了task 的所有属性,下一行将属性content 覆盖为新值。点差在content 之前 很重要。如果是之后,则新值将被点差覆盖。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 2019-12-08
    • 2017-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 2021-09-20
    • 2017-01-19
    相关资源
    最近更新 更多