我可以通过 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
有什么问题尽管问。谢谢。
我想通过调用 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
有什么问题尽管问。谢谢。