Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

178
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda