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

261
Vistas
Agrupar valores por una clave específica en una matriz anidada

¿Cuál sería la forma más eficiente de agrupar elementos por la clave de name en una matriz/objeto anidado?

La matriz principal se parece a esto aquí:

 let arr = [ { id: 123, compensatedItems: [ { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Another random item', id: '24122', reason: 'missing_items', }, { name: 'Another random item', id: '24122', reason: 'missing_items', }, ], }, { id: 341, compensatedItems: [ { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Another random item', id: '24122', reason: 'missing_items', }, ], }, ];

Donde tiene una matriz principal que tiene varios objetos, y cada objeto tiene una matriz de elementos compensatedItems con objetos adicionales.

Me gustaría agrupar los elementos compensatedItems por nombre para que el resultado final se vea así

 let res = [ { name: 'Random item 1', id: '123512', reason: 'missing_items', count: 5, }, { name: 'Another random item', id: '24122', reason: 'missing_items', count: 3, }, ];

Es uno de esos días en los que nada tiene sentido y es difícil encontrar una solución eficiente sin repetir 1000 veces. 🤦🏼‍♂️

¡Gracias!

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede obtener una matriz de elementos compensatedItems y usar su algoritmo/función de agrupación/conteo favorito.

 const data = [{ id: 123, compensatedItems: [{ name: 'Random item 1', id: '123512', reason: 'missing_items' }, { name: 'Random item 1', id: '123512', reason: 'missing_items' }, { name: 'Random item 1', id: '123512', reason: 'missing_items' }, { name: 'Another random item', id: '24122', reason: 'missing_items' }, { name: 'Another random item', id: '24122', reason: 'missing_items' }] }, { id: 341, compensatedItems: [{ name: 'Random item 1', id: '123512', reason: 'missing_items' }, { name: 'Random item 1', id: '123512', reason: 'missing_items' }, { name: 'Another random item', id: '24122', reason: 'missing_items' }] }], countBy = (array, key) => Object.values(array.reduce((r, o) => { r[o[key]] ??= { ...o, count: 0 }; r[o[key]].count++; return r; }, {})), result = countBy( data.flatMap(({ compensatedItems }) => compensatedItems), 'name' ); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede reducir una matriz plana con los elementos compensados de la siguiente manera:

 const arr = [ { id: 123, compensatedItems: [ { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Another random item', id: '24122', reason: 'missing_items', }, { name: 'Another random item', id: '24122', reason: 'missing_items', }, ], }, { id: 341, compensatedItems: [ { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Random item 1', id: '123512', reason: 'missing_items', }, { name: 'Another random item', id: '24122', reason: 'missing_items', }, ], },], compensatedItems = arr.flatMap(({compensatedItems}) => compensatedItems), result = Object.values(compensatedItems.reduce((a, {name, ...rest}) => { (a[name] || (a[name] = {...rest, name, count: 0})).count++; return a; }, Object.create(null))); console.log(result)
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Con la matriz plana, podemos reducirla con su lógica de conteo preferida.

about 4 years ago · Juan Pablo Isaza 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