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

221
Vistas
¿Cómo agrupar y contar elementos por lodash?

Mis datos:

 [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 1, name: 'foo' } ];

Quiero hacer algo como esto:

 [ { name: "foo", id: 1, count: 2 }, { name: "bar", id: 2, count: 1 } ]

Ahora estoy agrupando los elementos con groupBy por nombre.

¡Gracias por la ayuda!

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

0

 var source = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 1, name: 'foo' } ]; var result = _(source) .groupBy('name') .map(function(items, name) { return { name: name, count: items.length } }).value(); console.log(result);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>

about 4 years ago · Juan Pablo Isaza Denunciar

0

No es exactamente lo que pediste, pero aquí hay un método simple sin usar lodash. Aquí estoy usando la ID de cada elemento, pero puede usar cualquier cosa que lo identifique de manera única.

 const objArray = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 1, name: 'foo' } ]; const reduceAndCount = (arr) => { const newMap = {}; arr.forEach(el => { if (!newMap[el.id]) { el.count = 1 return newMap[el.id] = el } newMap[el.id].count = newMap[el.id].count + 1 }) return Object.values(newMap) } const result = reduceAndCount(objArray) console.log(result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Con deferencia a la respuesta proporcionada aquí que usa 'lodash', como se solicita en la pregunta anterior, se observan los siguientes puntos:

  1. el 'groupBy' es fijo (es decir, se usa el campo/columna/accesorio 'nombre')
  2. el resultado dado incluye el nombre y el conteo, pero el resultado esperado también necesita la 'id'.

EDITAR : Agregar solución usando lodash,

 const arrayRaw = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 1, name: 'foo' }]; const groupBy = (col = 'name', arr = arrayRaw) => ( _(arr).groupBy(col).map(it => ({ ...it[0], count: it.length })).value() ); console.log(groupBy());
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js"></script>

En caso de que alguien requiera una solución sin 'lodash', la siguiente debería ser una posible implementación:

 const arrayRaw = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 1, name: 'foo' }]; const groupBy = (col = 'name', arr = arrayRaw) => ( Object.entries(arr.reduce((fin, itm, idx) => ({ ...fin, [itm[col]]: (fin[itm[col]] || []).concat([idx]) }), {})).map(([k, v]) => ({ ...arr[v[0]], count: v.length })) ); console.log(groupBy());

Enfoque / Explicación Se explica por sí mismo, sin embargo, si alguien necesita uno, comente y agregaré.

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