Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

374
Views
Cómo agrupar con sum usando lodash

Tengo productId, que es una matriz de valores.

 const groupByvalue= [1, 2];

Tengo productos que tienen varias matrices de productos.

 const products = [ { id: 1, name: 'milk', qty: 2 }, { id: 2, name: 'butter', qty: 2 }, { id: 3, name: 'milk', qty: 2 }, { id: 2, name: 'butter', qty: 2 }, { id: 1, name: 'milk', qty: 2 }, { id: 3, name: 'butter', qty: 2 }, { id: 1, name: 'milk', qty: 2 }, { id: 3, name: 'butter', qty: 2 } ];
 const groupByKey = 'id';

Necesito agrupar los productos según la identificación del producto.

 conditions

i) groupBy debe basarse en groupByvalue con la matriz groupBykey (solo groupBy 1, 2) ii) después del grupo, debe sumar toda la cantidad

esperado

 [ { id: 1, name : "milk", qty : sum of all qty }, { id: 2, name : "butter", qty : sum of all qty } ];

¡¡Gracias!!

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Usando Lodash

 var _ = require('lodash'); var groupByValue = [1, 2]; var groupByKey = 'id'; const products = [ { id: 1, name: 'milk', qty: 2 }, { id: 2, name: 'butter', qty: 2 }, { id: 3, name: 'milk', qty: 2 }, { id: 2, name: 'butter', qty: 2 }, { id: 1, name: 'milk', qty: 2 }, { id: 3, name: 'butter', qty: 2 }, { id: 1, name: 'milk', qty: 2 }, { id: 3, name: 'butter', qty: 2 } ] const ans = _(products) .groupBy(groupByKey) .map((product) => { if(groupByValue.includes(product[0].id)){ return { id: product[0].id, name: product[0].name, qty: _.sumBy(product, 'qty') } } }) .value() console.log(ans.filter(item => item));

Producción :-

 [ { id: 1, name: 'milk', qty: 6 }, { id: 2, name: 'butter', qty: 4 } ]
about 4 years ago · Juan Pablo Isaza Report

0

No hay necesidad de lodash en absoluto, esta es una tarea .reduce() nativa. Puede hacer como;

 var groupByValue = [1, 2], groupByKey = 'id', products = [ { id : 1 , name: 'milk' , qty : 2 } , { id : 2 , name: 'butter' , qty : 2 } , { id : 3 , name: 'milk' , qty: 2 } , { id : 2 , name: 'butter' , qty : 2 } , { id : 1 , name: 'milk' , qty : 2 } , { id : 3 , name: 'butter' , qty : 2 } , { id : 1 , name: 'milk' , qty : 2 } , { id : 3 , name: 'butter' , qty : 2 } ], interim = products.reduce( (r,p) => ( groupByValue.includes(p[groupByKey]) && (r[p[groupByKey]] ? r[p[groupByKey]].qty += p.qty : r[p[groupByKey]] = Object.assign({},p)) , r ) , {} ), result = Object.values(interim); console.log(result);

Los productos milk con id:3 no cuentan.

about 4 years ago · Juan Pablo Isaza Report

0

Primero filtraría la matriz y luego haría el mapa, esto se puede hacer en una sola .reduce(...) , pero es más legible usando lodash:

 const _ = require('lodash'); const groupByValue = [1, 2]; const groupByKey = 'id'; const products = [ { id: 1, name: 'milk', qty: 1 }, { id: 2, name: 'butter', qty: 2 }, { id: 3, name: 'cheese', qty: 4 }, { id: 2, name: 'butter', qty: 5 }, { id: 1, name: 'milk', qty: 3 }, { id: 3, name: 'cheese', qty: 6 }, { id: 1, name: 'milk', qty: 1 }, { id: 3, name: 'cheese', qty: 7 } ]; const result = _(products) .filter(itm => groupByValue.includes(itm.id)) .groupBy(groupByKey) .map(arr => { const { id, name } = arr[0]; return { id, name, qty: _(arr).sumBy('qty') }; }) .value(); console.log(result); // output: [{ id: 1, name: 'milk', qty: 5},{id: 2, name: 'butter', qty: 7}]
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!