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

234
Vistas
Ordenar matriz agrupada en orden asc/desc

¿Alguien puede ayudar a ordenar la siguiente matriz en orden ascendente/descendente? La matriz se ordenará según el número más alto en cada agrupación (agrupada según la marca). Los números en cada grupo también deben ordenarse:

 original_array = [ { brand: "Ford", number: "1", }, { brand: "BMW", number: "1", }, { brand: "BMW", number: "5", }, { brand: "BMW", number: "20",}, { brand: "Toyota", number: "10",} ]; desc_order = [ { brand: "BMW", number: "20",}, { brand: "BMW", number: "5", }, { brand: "BMW", number: "1", }, { brand: "Toyota", number: "10",}, { brand: "Ford", number: "1", } ]; asc_order = [ { brand: "Ford", number: "1", }, { brand: "Toyota", number: "10",}, { brand: "BMW", number: "1", }, { brand: "BMW", number: "5", }, { brand: "BMW", number: "20",} ];
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Dado que el orden de las marcas en la salida depende de los valores máximos en su grupo, sugeriría crear primero un objeto que enumere el número máximo por marca.

Luego use eso para ordenar, usando la siguiente secuencia de ordenación:

  • Primero por el valor máximo para la marca
  • Cuando sea igual, por el nombre de la marca (ya que varias marcas podrían tener el mismo número máximo)
  • Cuando eso es igual, por el propio número

Implementación:

 const array = [ { brand: "Ford", number: "1", }, { brand: "BMW", number: "1", }, { brand: "BMW", number: "5", }, { brand: "BMW", number: "20", }, { brand: "Toyota", number: "10", } ]; // First collect the maximum values per brand as an aggregate: const aggr = {}; for (let {brand, number} of array) { aggr[brand] = Math.max(number, aggr[brand] ?? number); } // Ascending array.sort((a, b) => aggr[a.brand] - aggr[b.brand] || a.brand.localeCompare(b.brand) || a.number - b.number); console.log(array); // Descending array.sort((a, b) => aggr[b.brand] - aggr[a.brand] || b.brand.localeCompare(a.brand) || b.number - a.number); console.log(array);

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