Javascript:更改数组中元素的值而不改变数组

Ste*_*eve 2 javascript arrays element immutability

假设我有一个以下形式的数组:

const array = [{id: 1, title: "this"}, {id: 2, title: "that"}];
Run Code Online (Sandbox Code Playgroud)

我想更改给定对象中一个元素的值。例如,我的输出如下:

[{id: 1, title: "这个"}, {id: 2, title: "foo foo foo"}];

我将一个具有两个属性的对象传递给我的函数。第一个属性是我要修改的对象的id ,第二个属性是新标题

[2, "foo foo foo"]
Run Code Online (Sandbox Code Playgroud)

我可以使用以下代码找到正确对象的索引:

index = array.findIndex(item => item.id === arr[0]);
Run Code Online (Sandbox Code Playgroud)

但我不知道如何更改该元素并将其替换为我的新标题(arr[1])。

我想更改第二个对象中的标题元素而不改变数组。任何意见是极大的赞赏。

编辑:对于“不改变数组”的困惑,我们深表歉意。我的意思是我不希望返回的数组只是原始数组的突变,而是一个新数组。也许“不改变状态”会是更好的措辞选择。

例如,如果我要像这样返回一个数组: return [...state] 这将为我提供一个新数组(尽管没有任何更改),而不会改变原始数组。

Mar*_*yer 5

如果没有 \xe2\x80\xa6 很好地改变一个对象,你就无法真正改变它。您需要该对象的副本。假设复制数组不会花费太多,您可以执行以下操作:

\n\n

\r\n
\r\n
const arr = [{id: 1, title: "this"}, {id: 2, title: "that"}];\r\nconst a2 = arr.map(i => i.id == 2 ? Object.assign({}, i, {title: \'foo foo foo\'}): i)\r\n\r\nconsole.log("original: ", arr)\r\nconsole.log("with changes: ", a2)
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n\n

在这种情况下,您将复制原始对象(已更改的对象除外),该对象会获取包含更改的副本并保留原始对象。

\n