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

184
Vistas
Cómo reducir objetos en una matriz en función de un valor clave existente

Así que tengo una matriz existente con tres objetos:

 [ { date: 3/12/2022, oService: 10} { date: 3/13/2022, oService: 12, aService: 1} { date: 3/13/2022, oService: 1 }]

Según la fecha, me gustaría obtener algo parecido a lo siguiente:

 [ {date: 3/12/2022, oService: 10} {date: 3/13/2022, oService: 13, aService: 1}]

además, podría tener hasta 10 servicios, por lo que no puedo reducir por prev.oService. Tendré una variedad de servicios que se parece a:

const Services = [aService, bService, cService, oService, yService]

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

0

Creo que es mejor pensar en el problema como 2 pasos diferentes:

  • Primero, junta todas las cosas que pertenecen a la misma fecha. Este es un groupBy que debería poder buscar en StackOverflow o tomar prestado de una biblioteca existente.
  • Luego, fusiona cada uno de los grupos de fechas en un solo objeto.

La operación de merge es un poco más personalizada que la operación groupBy . Puedes implementarlo de muchas maneras. Yo propondría a:

  • Implementar merge para tratar con solo 2 objetos
  • Dentro de merge , recorra todas las claves únicas en esos objetos y súmelos (excluyendo la clave de date )
  • Para aplicar la merge a un grupo de fechas, use reduce . Tenga en cuenta que es seguro no proporcionar un argumento semilla aquí, porque tiene la garantía de no tener grupos vacíos.

 // Merge two date-service entries in to one const merge = (a, b) => { const merged = Object.assign({}, a); Object.keys(b).forEach(k => { if (k !== "date") merged[k] = (merged[k] || 0) + b[k]; }); return merged; }; const input = [ { date: "3/12/2022", oService: 10}, { date: "3/13/2022", oService: 12, aService: 1}, { date: "3/13/2022", oService: 1 }]; // Create groups that have a matching date const byDate = groupByProp("date", input); // Reduce each group to a single item by merging const all = Object.values(byDate).map(xs => xs.reduce(merge)); console.log(all); // A basic `groupBy` implementation function groupByProp(prop, xs) { return xs.reduce( (groups, x) => { const k = x[prop]; if (!groups[k]) groups[k] = [x]; else groups[k].push(x); return groups; }, {} ); }

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