Agrupar objetos por múltiples propiedades y agregar valores
En la tarea de agrupar objetos en una matriz por múltiples propiedades, un requisito común es no solo agrupa por estas propiedades sino que también resume los valores de ciertas propiedades del objeto. Sin embargo, una solución que simplemente anida todos los duplicados en una matriz bidimensional es insuficiente.
Declaración del problema
Considere una matriz de objetos que deben agruparse por forma y color. Los objetos de esta matriz se consideran duplicados sólo si su forma y color son iguales. Para los objetos duplicados, debemos resumir sus valores usados y de instancias y eliminar los duplicados, lo que da como resultado una lista concisa de objetos con formas y colores únicos.
Solución
Para resolver este problema de manera efectiva, podemos aprovechar el método Array#reduce junto con un objeto auxiliar que rastrea las combinaciones de formas y colores 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);
Salida:
[ { 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 solución agrupa eficientemente los objetos por forma y color, agrega sus valores usados y de instancia para objetos duplicados y elimina los duplicados restantes, lo que genera el resultado deseado.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3