mi código es:
let obj1 = [ { city: 'Tokyo', country: 'Japan' }, { city: 'Bangkok', country: 'Thailand'} ]; function myFunc(arr, key, value){ let newArr = arr.map((e)=>{ let obj = e; obj[key] = value; return obj; }) return newArr } console.log(myFunc(obj1, 'continent', 'Asia')); console.log(obj1);No quiero mutar la matriz "obj1". Es por eso que estoy usando el método Array.map. Pero sigue cambiando la matriz original. ¿Alguien sabe por qué sucede esto? ¿Dónde cometí el error?
Podrías tomar un objeto nuevo y esparcir el viejo.
function myFunc(arr, key, value){ return arr.map(e => ({ ...e, [key]: value })); } let obj1 = [{ city: 'Tokyo', country: 'Japan' }, { city: 'Bangkok', country: 'Thailand'}]; console.log(myFunc(obj1, 'continent', 'Asia')); console.log(obj1); .as-console-wrapper { max-height: 100% !important; top: 0; }Pensó que usar el operador igual copiaría cada objeto en la matriz para que no mute el objeto
let obj = e;pero lo que tiene en el código es otra referencia a los mismos elementos en la matriz.
el map en sí no es una garantía de que tenga una estructura de datos inmutable, debe copiar correctamente los datos, para los objetos en js puede usar Object.assign o el operador de spread operater
let obj = { ...e }; // or let obj = Object.assign({}, e);