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

170
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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