我有一個物件陣列。每個物件都有一個鍵quantity和value。我想根據其數量復制陣列中的每個物件。接下來,我只想操作陣列中的一個重復物件。但是在操作value1 個物件時,所有重復物件的值都會發生變化。這是我的代碼:
let arr = [
{ id: 1, quantity: 3, value: 10 },
{ id: 2, quantity: 1, value: 5 },
{ id: 2, quantity: 5, value: 5 },
];
const newArr = [];
for (const a of arr) {
if (a.quantity > 1) {
let quantity = a.quantity;
a.quantity = 1;
while (quantity--) {
newArr.push(a);
}
}
}
arr = newArr;
arr[0].value = 1;
當我將 的值更改為arr[0]時1,value欄位arr[1]和arr[2]也更改為 1。
我嘗試使用擴展運算子 and 復制物件JSON.parse(JSON.parse()),但沒有一個有效。
uj5u.com熱心網友回復:
因為newArr.push(a). a推到newArrref 的元素arr
您可以編輯相同:
let arr = [
{ id: 1, quantity: 3, value: 10 },
{ id: 2, quantity: 1, value: 5 },
{ id: 2, quantity: 5, value: 5 },
]
const newArr = []
for (const a of arr) {
if (a.quantity > 1) {
let quantity = a.quantity;
a.quantity = 1;
while (quantity--) {
newArr.push({...a})
}
}
}
arr = [...newArr]
arr[0].value = 1
console.log(arr)
// example for Memory Management
let a = { id: 1, quantity: 3, value: 10 }
let b = { id: 1, quantity: 3, value: 10 }
let c = arr[0]
let d = {...arr[0]}
console.log(a === arr[0]) // false : different allocates memory for contain value
console.log(a === b) // false : different allocates memory for contain value
console.log(c === arr[0]) // true : refer to a memory
console.log(d === arr[0]) // false : different allocates memory for contain value
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/482187.html
標籤:javascript 数组 循环 目的 javascript 对象
