Creé un objeto "str", que tiene las propiedades "compañía", "CEO", "empleados".
Como puede ver, en las propiedades de los empleados, creé una matriz que contiene dos objetos y ambos tienen dos pares clave/valor: "name": "Duke" y "age": 10 .
Quiero cambiar la propiedad " nombre ", en el primer objeto tiene el valor "Hola" y en el segundo objeto es "Hola", pero ambas propiedades tienen el valor "Hola". Entonces, ¿por qué mi código no funciona?
// create the values of key "employees" var employee =[]; var name_age={ "name":"Duke", "age":10 }; for(i=0;i<2;i++){ employee.push(name_age); } // create object str var str = { "company": "facebook", "CEO": "Mark Zuckerberg", "employees":employee }; str.employees[0].name="Hello"; str.employees[1].name="Hi"; console.log(str);Muchas gracias
Cuando está tratando con objetos y los empuja a una matriz, en realidad está empujando su referencia. En su código, está insertando en la matriz dos referencias pero al mismo objeto. Por lo tanto, cuando cambie la propiedad de la referencia, también cambiará para la otra. Este artículo puede ayudarte: https://javascript.info/object-copy
Si desea crear dos objetos diferentes, debe usar el operador de extensión. En lugar de esta línea:
employee.push(name_age);Puedes usar esto:
employee.push({...name_age});Creo que si usas el operador de propagación lo resolverás.
employee.push({...name_age});