我可以通过 array.find() 修改值 return 来更新对象数组吗?

Can I update an array of objects by modifiying a value return by array.find()?

我想通过调用 array.find() 修改数组中的对象,然后改变 returned 引用以间接改变数组,但这似乎不起作用。我从阅读其他文章中假设 array.find() return 是对数组中对象的引用,成功匹配但事实并非如此。

this codesandbox 中,如果我改变 array.find() 的结果,则数组不会更新。如果我用 array.findIndex() 替换 array.find() 并按索引修改数组元素,我可以更新数组,但代码不那么干净,我仍然不明白为什么我不能通过引用更新.

array.find() return 是对数组中对象的引用还是副本?在 codesandbox 中,它看起来就像是一个副本。

如有任何建议,我们将不胜感激。

Find只是找到数组中的第一个元素,他们不编辑元素,而是找到元素。所以当你有了元素之后,你可以编辑,但是你没有元素在数组中的索引,所以如果你想在数组中传递编辑的元素,你也需要索引。

您有多种更新方式。如果你想要一个更短的方式,现在我想到了这样的方式:

   setArray((oldState) =>
      oldState.map((item) => {
        if (item.value === "one") {
          return {
            value: "asdasd"
          };
        }
        return {...item};
      })
    );

那么直接就可以设置里面的值了setArray为什么?因为 map returns 一个新数组。 或者你可以写得更具可读性:

 const newState = array.map((item) => {
        if (item.value === "one") {
          return {
            value: "asdasd"
          };
        }
        return {...item};
      });
    setArray(newState)

可以找到类似的问题here

有什么问题尽管问。谢谢。