Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

93
Vistas
Cómo reducir la matriz a objeto con subclaves

Parece que no puedo entender la función JS array.reduce(). Tengo la siguiente matriz de entrada y quiero transformarla en un objeto con reducción para obtener el siguiente resultado:

Aporte:

 let cars = [ { name: 'bmw', type: 'diesel' }, { name: 'mercedes', type: 'gas' }, { name: 'honda', type: 'electric' }, { name: 'bmw', type: 'gas' } ];

Salida deseada:

 { "bmw": [{type: 'diesel'}, {type: 'gas'}], "mercedes": [{"type": "gas"}], "honda": [{"type": "electric"}] }

Lo que he probado:

 let output = input.reduce((acc, item) => { if (!acc[item.name]) { acc[item.name] = [{ type: item.type }]; } else { acc[item.name] = []; // How can I add the value of the second bmw occurrence into the array? } return acc; }, {}); console.log(output);

Lo que tengo:

 { "bmw": [], "mercedes": [{"type": "gas"}], "honda": [{"type": "electric"}] }

Cualquier sugerencia es muy apreciada como novato de JS aquí. ¡Gracias!

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puede difundir el valor de matriz existente y agregar un nuevo valor

 let output = cars.reduce((acc, item) => { if (!acc[item.name]) { acc[item.name] = [{ type: item.type }]; } else { acc[item.name] = [...acc[item.name], { type: item.type }]; // spread and insert } return acc; }, {});

Referencia https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax

about 4 years ago · Santiago Trujillo Denunciar

0

Esta es básicamente la misma lógica que la solución de kwaiks. Las principales diferencias son que esto no infiere la veracidad de si una entrada está definida, sino que pregunta explícitamente sobre la propiedad y, en lugar de difundir, simplemente usa el método push.

 let output = cars.reduce((acc, currentValue, currentIndex, arr) => { acc.hasOwnProperty(currentValue.name) ? acc[currentValue.name].push({type: currentValue.type}) : acc[currentValue.name] = [{type: currentValue.type}]; return acc; }, {});

Si no tiene la intención de volver a declarar la salida, es posible que desee intercambiar let con const .

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda