Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

256
Vistas
Cómo girar una matriz de objetos con GroupBy y Sum en Javascipt

Tengo una variedad de objetos, necesito arr con product , calorie y aplicar (agrupación y suma) en los parámetros restantes.

Y luego requiere datos en un solo objeto. Probé el siguiente código, funciona bien pero dividí el código en 3 partes. ¿Podría tener un código mejor que este o está bien?

 var arr = [{ "product": "Jam", "calorie": 2000, "A": 300, "B": 500, "type": "Daily" }, { "product": "Sugar", "calorie": 1000, "A": 100, "B": 200, "type": "Daily" } ] var a1 = {} var a2 = {} //Step-1 Pivot for (let i = 0; i < arr.length; i++) { a1[arr[i]['product']] = arr[i]['calorie']; } //Step-2 Group and sum a2 = groupAndSum(arr, ['type'], ['A', 'B'])[0]; //Step-3 merging. console.log({ ...a1, ...a2 }) //General grouping and summing function that accepts an //@Array:Array of objects //@groupKeys: An array of keys to group by, //@sumKeys - An array of keys to sum. function groupAndSum(arr, groupKeys, sumKeys) { return Object.values( arr.reduce((acc, curr) => { const group = groupKeys.map(k => curr[k]).join('-'); acc[group] = acc[group] || Object.fromEntries(groupKeys.map(k => [k, curr[k]]).concat(sumKeys.map(k => [k, 0]))); sumKeys.forEach(k => acc[group][k] += curr[k]); return acc; }, {}) ); }

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Aquí una sola función que toma 3 params:

 const func = (arr, pivot_vals, sum_vals) => { return arr.reduce((a, v) => { pivot_vals.forEach((pivot) => { a[v[pivot[0]]] = v[pivot[1]]; }); sum_vals.forEach((key) => { if (!a[key]) a[key] = 0; a[key] += v[key]; }); return a; },{}); };

arr que contiene los datos

matriz sum_vals con todos los accesorios que desea que se sumen

matriz anidada pivot_vals con los accesorios que deben vincularse

No estaba seguro de qué hacer con el type , ya que es una cadena que no se puede sumar. ¿Querías contar la cantidad de tipos?

 let arr = [ { product: "Jam", calorie: 2000, A: 300, B: 500, type: "Daily", }, { product: "Sugar", calorie: 1000, A: 100, B: 200, type: "Daily", }, ]; let sum_vals = ["A","B"] let pivot_vals = [["product", "calorie"]]; const func = (arr, pivot_vals, sum_vals) => { return arr.reduce((a, v) => { pivot_vals.forEach((pivot) => { a[v[pivot[0]]] = v[pivot[1]]; }); sum_vals.forEach((key) => { if (!a[key]) a[key] = 0; a[key] += v[key]; }); return a; },{}); }; console.log(func(arr, pivot_vals, sum_vals));

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda