1 个对象的值更改数组中所有对象的更改
Value change in 1 object changes in all objects in array
我有一组对象。每个对象都有一个键 quantity
和 value
。我想根据数量复制数组中的每个对象。接下来,我只想操作数组中的一个重复对象。但是在操作 1 个对象的 value
时,所有重复对象的值都会发生变化。这是我的代码:
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
时,arr[1]
和arr[2]
的value
字段也改成了1。
我尝试使用扩展运算符和 JSON.parse(JSON.parse())
复制对象,但 none 成功了。
因为 newArr.push(a)
.a
推送到 newArr
ref 到 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
我有一组对象。每个对象都有一个键 quantity
和 value
。我想根据数量复制数组中的每个对象。接下来,我只想操作数组中的一个重复对象。但是在操作 1 个对象的 value
时,所有重复对象的值都会发生变化。这是我的代码:
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
时,arr[1]
和arr[2]
的value
字段也改成了1。
我尝试使用扩展运算符和 JSON.parse(JSON.parse())
复制对象,但 none 成功了。
因为 newArr.push(a)
.a
推送到 newArr
ref 到 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