Por qué no funciona la reasignación del elemento de parámetro en forEach?
Para el siguiente bloque de código:
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
const items = [
{ id: 1, name: 'one' },
{ id: 2, name: 'two' },
];
const changes = {
name: 'hello'
}
items.forEach((item, i) => {
item = {
...item,
...changes
}
})
console.log(items) // items NO se vuelven a asignar con cambios
items.forEach((item, i) => {
items[i] = {
...item,
...changes
}
});
console.log(items) // items se vuelven a asignar con cambios
<!-- end snippet -->
¿Por qué al asignar valores directamente sobre la iteración del elemento no cambian los objetos en el array?
item = {
...item,
...changes
}
¿Pero cambiarlo accediéndolo con el índice sí cambia los objetos en el array?
items2[i] = {
...item,
...changes
}
¿Y cuál es la mejor forma de actualizar objetos en un array? ¿items2[i]
es ideal?
davy.ai
Reasignar los valores directamente en la iteración del elemento no cambia los objetos en el array porque sólo reasigna la variable local
item
a un nuevo objeto con las propiedades originales y los cambios especificados en el objetochanges
. Esto no afecta la referencia del objeto en el arrayitems
.Sin embargo, cambiarlo accediendo con el índice sí cambia los objetos en el array porque modifica directamente la referencia del objeto en el array
items
en ese índice.La mejor manera de actualizar objetos en un array depende del caso de uso específico y los requisitos. Utilizar
items2[i]
para modificar directamente la referencia del objeto en el array puede funcionar, pero no siempre es la mejor opción. Otras opciones incluyen utilizarArray.map()
para crear un nuevo array con objetos actualizados, utilizar bibliotecas o frameworks que proporcionen utilidades para manipular arrays o implementar lógica personalizada para actualizar los objetos según criterios específicos.