Tengo una variedad de objetos. Cada objeto tiene una quantity y un value clave. Quiero duplicar cada objeto en la matriz según su cantidad. A continuación, quiero manipular solo uno de los objetos duplicados en la matriz. Pero al manipular el value de 1 objeto, el valor de todos los objetos duplicados cambia. Aquí está mi código:
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; Cuando cambié el valor de arr[0] a 1 , el campo de value de arr[1] y arr[2] también cambió a 1.
Intenté copiar el objeto usando el operador de propagación y JSON.parse(JSON.parse()) , pero ninguno funcionó.
Porque newArr.push(a) . a impulso a newArr ref al elemento de arr
Puedes editar lo mismo que:
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