考慮以下示例: 我們創建一個對象并將其分配給變量foo,然后將foo分配給bar。因此,現在foo和bar都引用了相同的對象,如下圖所示。 let foo = { id: 1, val: "foo" }; let bar = foo; 接下來,讓我們更改對象的val字段,即分配給bar。我們注意到,變量foo和bar都反映了變化,這是因為這兩個變量引用的是同一個對象。 let foo = {id: 1,val: "foo"}; let bar = foo; bar.val = "bar"; console.log(foo, bar); 接下來,我們將一個新對象分配給bar。請注意,這不會影響foo引用的對象,bar現在只是引用了另一個對象。 let foo = { id: 1, val: "foo" }; let bar = foo; bar = { id: 1, val: "bar" }; console.log(foo, bar); 讓我們將其與您問題中的forEach示例聯系起來。因此,在forEach循環的每次迭代中,回調函數中的item參數指向數組中的一個對象,當您從這個item參數更改字段時,它會更改數組中的對象,但當您將item分配給新對象時,它不會對存儲在數組中的對象執行任何操作。 如果要用新對象替換整個對象,可以采取幾種方法,其中兩種方法如下所述: 查找存儲對象的索引并將其替換為新對象。 const arr = [{ id: 1, value: 1 }, { id: 2, value: 2 }, { id: 3, value: 3 }, { id: 4, value: 4 }, { id: 5, value: 5 }]; const index = arr.findIndex((obj) => obj.id === 3); if (index !== -1) { arr[index] = { id: 6, value: 6 }; } console.log(arr); 另一種非常常見的方法是在數組上map,并創建一個新數組,替換一個對象。 const arr = [{ id: 1, value: 1 }, { id: 2, value: 2 }, { id: 3, value: 3 }, { id: 4, value: 4 }, { id: 5, value: 5 }]; const newArr = arr.map((obj) => (obj.id === 3 ? { id: 6, value: 6 } : obj)); console.log(newArr);
考慮以下示例:
我們創建一個對象并將其分配給變量
foo
,然后將foo
分配給bar
。因此,現在foo
和bar
都引用了相同的對象,如下圖所示。接下來,讓我們更改對象的
val
字段,即分配給bar
。我們注意到,變量foo
和bar
都反映了變化,這是因為這兩個變量引用的是同一個對象。接下來,我們將一個新對象分配給
bar
。請注意,這不會影響foo
引用的對象,bar
現在只是引用了另一個對象。讓我們將其與您問題中的
forEach
示例聯系起來。因此,在forEach
循環的每次迭代中,回調函數中的item
參數指向數組中的一個對象,當您從這個item
參數更改字段時,它會更改數組中的對象,但當您將item
分配給新對象時,它不會對存儲在數組中的對象執行任何操作。如果要用新對象替換整個對象,可以采取幾種方法,其中兩種方法如下所述:
map
,并創建一個新數組,替換一個對象。