"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como agrupar objetos por múltiplas propriedades e agregar valores em JavaScript?

Como agrupar objetos por múltiplas propriedades e agregar valores em JavaScript?

Publicado em 2024-12-25
Navegar:712

How to Group Objects by Multiple Properties and Aggregate Values in JavaScript?

Agrupando objetos por múltiplas propriedades e agregando valores

Na tarefa de agrupar objetos em uma matriz por múltiplas propriedades, um requisito comum é não apenas agrupar por essas propriedades, mas também somar os valores de certas propriedades do objeto. No entanto, uma solução que simplesmente aninhe todas as duplicatas em uma matriz bidimensional é insuficiente.

Declaração do problema

Considere uma matriz de objetos que devem ser agrupados por forma e cor. Os objetos nesta matriz são considerados duplicados somente se sua forma e cor forem iguais. Para objetos duplicados, precisamos somar seus valores usados ​​e de instâncias e remover as duplicatas, resultando em uma lista concisa de objetos com formas e cores exclusivas.

Solução

Para resolver esse problema de maneira eficaz, podemos aproveitar o método Array#reduce em conjunto com um objeto auxiliar que rastreia as combinações de formas e cores encontradas:

const arr = [
  { shape: 'square', color: 'red', used: 1, instances: 1 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
  { shape: 'circle', color: 'blue', used: 0, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 4 },
  { shape: 'circle', color: 'red', used: 1, instances: 1 },
  { shape: 'circle', color: 'red', used: 1, instances: 0 },
  { shape: 'square', color: 'blue', used: 4, instances: 5 },
  { shape: 'square', color: 'red', used: 2, instances: 1 },
];

const helper = {};
const result = arr.reduce((r, o) => {
  const key = `${o.shape}-${o.color}`;

  if (!helper[key]) {
    // If it's a unique combination, add to the helper and result array
    helper[key] = Object.assign({}, o);
    r.push(helper[key]);
  } else {
    // If it's a duplicate, update the values in the helper
    helper[key].used  = o.used;
    helper[key].instances  = o.instances;
  }

  return r;
}, []);

console.log(result);

Saída:

[
  { shape: "square", color: "red", used: 5, instances: 3 },
  { shape: "circle", color: "red", used: 2, instances: 1 },
  { shape: "square", color: "blue", used: 11, instances: 9 },
  { shape: "circle", color: "blue", used: 0, instances: 0 }
]

Esta solução agrupa com eficiência os objetos por forma e cor, agrega seus valores usados ​​e de instâncias para objetos duplicados e remove quaisquer duplicatas restantes, resultando na saída desejada.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3