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}]Estás tratando de hacer dos cosas aquí.
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))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);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;}