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.
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