DESCARGO DE RESPONSABILIDAD: Por favor, no se preocupen por mis estúpidos nombres de objetos, es solo para aprender lo básico
Tengo una serie de objetos llamados "coches":
const cars = [ { name: "red", competes: true, category: 2, given: 400 }, { name: "blue", competes: false, category: 2, given: 0 }, { name: "green", competes: true, category: 2, given: 0 } ]Y otra matriz de objetos llamados addOns:
const addOns = [ { name: "hyperblast", upgrade: 100 }, { name: "catalyst", upgrade: 400 } ]Pregunta
¿Cómo puedo agregar, por ejemplo, el complemento {nombre: "catalizador", actualización: 400} al automóvil llamado "verde"?
he probado con
cars[2].push(addOns[1]);pero no funciona Y todas mis búsquedas en Google no dieron resultado (las matrices de objetos parecen muy importantes, pero constantemente no encuentro nada al respecto. Solo sobre matrices u objetos, nunca juntos)
Puede agregar los complementos como otro campo del objeto del automóvil. Para su ejemplo: cars[2].extra = addOns[0]; . Después de escribir esto, si intenta consolar los autos[2], verá:
{ name: 'green', competes: true, category: 2, given: 0, extra: { name: 'hyperblast', upgrade: 100 } } Como está trabajando con Vanilla Js, cars[0].extra funcionará, pero si usa TS en el futuro, sería mejor definir un campo antes de agregarlo o cambiar la estructura del script por completo.
Como los automóviles y los complementos tienen la clave de propiedad 'nombre', cambiaría el segundo a 'addOnName' o algo por el estilo. De lo contrario, 'verde' simplemente se sobrescribirá con 'hiperexplosión' en el resultado.
Dado que está tratando de agregar múltiples propiedades a un objeto, debe usar un bucle for...in. Como puede ver a continuación, he recorrido la matriz de autos con un bucle for regular. Si el nombre del automóvil dado es 'verde', llamo a la función addProps y le paso el objeto del automóvil dado como argumento. Cada accesorio en su objeto de complementos elegido se agrega luego al objeto de automóvil dado.
const addProps = (obj) => { for (let prop in addOns[0]) { obj[prop] = addOns[0][prop]; } } for (let i = 0; i < cars.length; i++) { if (cars[i].name === 'green') { addProps(cars[i]); } } console.log(cars);