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

158
Views
Agrupe una matriz de ventas por vendedores, obtenga el total de cada vendedor, ordene por ventas totales

Tengo una matriz como esta:

 [ { "orderId": 1, "orderDate": "2021-04-28T08:20:58Z", "status": "Confirmed", "sellerName": "Chris Gilmour", "revenue": 2316.49 }, { "orderId": 2, "orderDate": "2020-12-19T12:30:18Z", "status": "Confirmed", "sellerName": "Alanna Sumner", "revenue": 2928.88 }, { "orderId": 4, "orderDate": "2020-12-24T08:00:09Z", "status": "Confirmed", "sellerName": "Beth North", "revenue": 1550.19 }, { "orderId": 5, "orderDate": "2021-06-06T04:40:48Z", "status": "Confirmed", "sellerName": "Laura Ponce", "revenue": 35.5 }, { "orderId": 8, "orderDate": "2021-08-27T05:13:40Z", "status": "Canceled", "sellerName": "Blade Newman", "revenue": 2957.29 }, { "orderId": 9, "orderDate": "2020-12-26T08:07:57Z", "status": "Confirmed", "sellerName": "Alanna Sumner", "revenue": 2164.75 }, { "orderId": 10, "orderDate": "2021-04-23T18:44:19Z", "status": "Confirmed", "sellerName": "Blade Newman", "revenue": 2287.55 } ]

Quiero que la nueva matriz sea:

 [ { "sellerName": "Blade Newman", "totalRevenue": 5244.84 }, { "sellerName": "Alanna Sumner", "totalRevenue": 5093.63 }, { "sellerName": "Chris Gilmour", "totalRevenue" : 2316.49 }, { "sellerName": "Beth North", "totalRevenue": 1550.19 } ]

Así que quiero que la matriz se agrupe por nombre del vendedor, la cantidad vendida resumida y ordenada por los vendedores con la mayor cantidad de ventas totales.

Traté de resolver esto usando forEachs y reduce, pero fallé, si alguien puede ayudarme, sería genial.

Gracias por adelantado.

about 4 years ago · Santiago Gelvez
3 answers
Answer question

0

Como lo describe @CarySwoveland en los comentarios, puede acumular ingresos para cada vendedor en un objeto, convertir las entradas del objeto en una matriz para ordenar y luego generar un nuevo objeto basado en los valores ordenados:

 const sales = [{ "orderId": 1, "orderDate": "2021-04-28T08:20:58Z", "status": "Confirmed", "sellerName": "Chris Gilmour", "revenue": 2316.49 }, { "orderId": 2, "orderDate": "2020-12-19T12:30:18Z", "status": "Confirmed", "sellerName": "Alanna Sumner", "revenue": 2928.88 }, { "orderId": 4, "orderDate": "2020-12-24T08:00:09Z", "status": "Confirmed", "sellerName": "Beth North", "revenue": 1550.19 }, { "orderId": 5, "orderDate": "2021-06-06T04:40:48Z", "status": "Confirmed", "sellerName": "Laura Ponce", "revenue": 35.5 }, { "orderId": 8, "orderDate": "2021-08-27T05:13:40Z", "status": "Canceled", "sellerName": "Blade Newman", "revenue": 2957.29 }, { "orderId": 9, "orderDate": "2020-12-26T08:07:57Z", "status": "Confirmed", "sellerName": "Alanna Sumner", "revenue": 2164.75 }, { "orderId": 10, "orderDate": "2021-04-23T18:44:19Z", "status": "Confirmed", "sellerName": "Blade Newman", "revenue": 2287.55 } ]; let totalsales = sales.reduce((acc, { sellerName, revenue }) => { acc[sellerName] = (acc[sellerName] || 0) + revenue; return acc; }, {}); totalsales = Object.entries(totalsales) .sort((a, b) => b[1] - a[1]) .map((v) => ({ sellerName: v[0], totalRevenue: v[1] })) console.log(totalsales)

about 4 years ago · Santiago Gelvez Report

0

Puedes probar esto:

 const newArray=[]; for (var order of orders) { var index = newArray.findIndex((a)=>a.sellerName==order.sellerName); if (index>-1){ newArray[index].totalRevenue+=order.revenue; } else { newArray.push({ sellerName: order.sellerName, totalRevenue: order.revenue }) } } newArray.sort((a,b)=>b.totalRevenue-a.totalRevenue);
about 4 years ago · Santiago Gelvez Report

0

La misma técnica que en otras respuestas, pero doblada en una sola función:

 const total = (sales) => Object .entries (sales .reduce ( (a, {sellerName: n, revenue}) => ({...a, [n] : (a[n] ?? 0) + revenue}), {} )) .map (([sellerName, totalRevenue]) => ({sellerName, totalRevenue})) const sales = [{orderId: 1, orderDate: "2021-04-28T08: 20: 58Z", status: "Confirmed", sellerName: "Chris Gilmour", revenue: 2316.49}, {orderId: 2, orderDate: "2020-12-19T12: 30: 18Z", status: "Confirmed", sellerName: "Alanna Sumner", revenue: 2928.88}, {orderId: 4, orderDate: "2020-12-24T08: 00: 09Z", status: "Confirmed", sellerName: "Beth North", revenue: 1550.19}, {orderId: 5, orderDate: "2021-06-06T04: 40: 48Z", status: "Confirmed", sellerName: "Laura Ponce", revenue: 35.5}, {orderId: 8, orderDate: "2021-08-27T05: 13: 40Z", status: "Canceled", sellerName: "Blade Newman", revenue: 2957.29}, {orderId: 9, orderDate: "2020-12-26T08: 07: 57Z", status: "Confirmed", sellerName: "Alanna Sumner", revenue: 2164.75}, {orderId: 10, orderDate: "2021-04-23T18: 44: 19Z", status: "Confirmed", sellerName: "Blade Newman", revenue: 2287.55}] console .log (total (sales))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Usando reduce , obtenemos este formato intermedio:

 { "Chris Gilmour": 2316.49, "Alanna Sumner": 5093.63, "Beth North": 1550.19, "Laura Ponce": 35.5, "Blade Newman": 5244.84 }

Entonces Object .entries lo convierte en

 [ ["Chris Gilmour", 2316.49], ["Alanna Sumner", 5093.63], ["Beth North", 1550.19], ["Laura Ponce", 35.5], ["Blade Newman", 5244.84] ]

y la llamada de map lo convierte en su forma final.

about 4 years ago · Santiago Gelvez 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!