"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo agrupar objetos por múltiples propiedades y agregar valores en JavaScript?

¿Cómo agrupar objetos por múltiples propiedades y agregar valores en JavaScript?

Publicado el 2024-12-25
Navegar:546

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

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.

Último tutorial Más>

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