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

175
Views
¿Cómo organizo un Array de objetos según la suma de sus atributos?

Estoy desarrollando la parte backEnd para una aplicación de venta en la que tengo 2 Array of Objects, uno tiene el nombre del vendedor y el otro tiene las ventas mensuales. Mis superiores me dijeron que ordenara la matriz de nombres desde el que hizo la mayor cantidad de ventas hasta el que hizo la menor cantidad (de mayor a menor) utilizando los datos de la matriz que contiene las ventas, básicamente haciendo una suma de las clave => cantidad. No estoy seguro de cómo hacerlo, traté de usar un método de reducción con las ventas de cada vendedor, pero no se me ocurre cómo compararlos para reorganizar el Array. El código es:

 const sellers= [{id:1,name: 'juan', age: 23},{id:2,name: 'adrian', age: 32},{id:3,name: 'apolo', age: 45}]; const sales= [{equipo: 'frances', sellerId: 2, quantity: 234},{equipo: 'italiano', sellerId: 3, quantity: 24},{equipo: 'polaco', sellerId: 1, quantity: 534},{equipo: 'frances', sellerId: 2, quantity: 1234},{equipo: 'frances', sellerId: 3, quantity: 2342}];

Esto es lo que ya he probado:

 const bestSellers= () => { sales.reduce((sum, value) => ( value.sellerId == 1 ? sum + value.area : sum), 0); }

El resultado final debería verse así:

 const sellers= [{id:3,name: 'apolo', age: 45},{id:2,name: 'adrian', age: 32},{id:1,name: 'juan', age: 23}]
about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Estás tratando de hacer dos cosas aquí.

  1. Encuentre las ventas totales de cada vendedor.
  2. Ordenar las ventas totales de cada vendedor.

Dentro de mi función de clasificación, puede ver que estoy filtrando todas las ventas por vendedor.

Una vez que tengo solo las ventas de un vendedor, uso el método de reducción para sumar la cantidad de sus ventas en un número fácil de usar.

Luego comparo la cantidad de vendedores anteriores con la cantidad de vendedores actuales para reordenarlos usando el método de clasificación.

Lo animo a leer la documentación de los métodos utilizados para que comprenda lo que sucede en cada paso.

Métodos utilizados: Ordenar Filtrar Reducir

 const sellers = [{ id: 1, name: 'juan', age: 23 }, { id: 2, name: 'adrian', age: 32 }, { id: 3, name: 'apolo', age: 45 }]; const sales = [{ equipo: 'frances', sellerId: 2, quantity: 234 }, { equipo: 'italiano', sellerId: 3, quantity: 24 }, { equipo: 'polaco', sellerId: 1, quantity: 534 }, { equipo: 'frances', sellerId: 2, quantity: 1234 }, { equipo: 'frances', sellerId: 3, quantity: 2342 }]; const expected = [{ id: 3, name: 'apolo', age: 45 }, { id: 2, name: 'adrian', age: 32 }, { id: 1, name: 'juan', age: 23 }] const result = sellers.sort((a, b) => { totalA = sales.filter(sale => sale.sellerId === a.id).reduce((acc, val) => acc + val.quantity, 0) totalB = sales.filter(sale => sale.sellerId === b.id).reduce((acc, val) => acc + val.quantity, 0) return totalB - totalA }) // Check we get what we expect console.log(JSON.stringify(expected) === JSON.stringify(result))

about 4 years ago · Juan Pablo Isaza Report

0

Primero, reduzca la matriz de sales a la suma de la cantidad de cada vendedor, ordene esta lista y luego asigne al vendedor respectivo de la matriz de sellers .

 const sellers= [{id:1,name: 'juan', age: 23},{id:2,name: 'adrian', age: 32},{id:3,name: 'apolo', age: 45}]; const sales= [{equipo: 'frances', sellerId: 2, quantity: 234},{equipo: 'italiano', sellerId: 3, quantity: 24},{equipo: 'polaco', sellerId: 1, quantity: 534},{equipo: 'frances', sellerId: 2, quantity: 1234},{equipo: 'frances', sellerId: 3, quantity: 2342}]; const bestSellers = (sellers, sales) => { let res = sales.reduce((result, sale) => { // Check if seller is already added in result const obj = result.find(s => s.sellerId === sale.sellerId); if (obj) { // If seller already added then increase it's quantity obj.quantity += sale.quantity; } else { // If seller not added, add seller in result result.push({ sellerId: sale.sellerId, quantity: sale.quantity }); } return result; }, []); // Sort result by quantity in decreasing order res.sort((a,b) => b.quantity - a.quantity); // Map each sale to the seller res = res.map(s => sellers.find(seller => seller.id === s.sellerId)); return res; } const result = bestSellers(sellers, sales); console.log(result);

about 4 years ago · Juan Pablo Isaza Report

0

usted puede hacer eso:

 const sellers = [ { id: 1, name: 'juan', age: 23 } , { id: 2, name: 'adrian', age: 32 } , { id: 3, name: 'apolo', age: 45 } ] , sales = [ { equipo: 'frances', sellerId: 2, quantity: 234 } , { equipo: 'italiano', sellerId: 3, quantity: 24 } , { equipo: 'polaco', sellerId: 1, quantity: 534 } , { equipo: 'frances', sellerId: 2, quantity: 1234 } , { equipo: 'frances', sellerId: 3, quantity: 2342 } ]; sellers.forEach( ({id},i,all) => // add a sum attribute { all[i].sum = sales .filter(({sellerId})=>sellerId===id) .reduce((sum,{quantity})=>sum+quantity,0) }); sellers .sort( (a,b) => b.sum - a.sum) .forEach((seller,i,all) => delete seller.sum ) // remove the sum console.log( sellers )
 .as-console-wrapper {max-height: 100% !important;top: 0;} .as-console-row::after {display: none !important;}

o:

 const sellers = [ { id: 1, name: 'juan', age: 23 } , { id: 2, name: 'adrian', age: 32 } , { id: 3, name: 'apolo', age: 45 } ] , sales = [ { equipo: 'frances', sellerId: 2, quantity: 234 } , { equipo: 'italiano', sellerId: 3, quantity: 24 } , { equipo: 'polaco', sellerId: 1, quantity: 534 } , { equipo: 'frances', sellerId: 2, quantity: 1234 } , { equipo: 'frances', sellerId: 3, quantity: 2342 } ] // compute all the sum in a new Sums object: const Sums = sales.reduce((sum,{sellerId : id, quantity}) => ( sum[id] ??= 0, sum[id] += quantity , sum ), {} ) sellers .sort( (a,b) => Sums[b.id] - Sums[a.id]) console.log( sellers )
 .as-console-wrapper {max-height: 100% !important;top: 0;} .as-console-row::after {display: none !important;}

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!