Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

181
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda