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

364
Vistas
Javascript ordena una matriz de objetos usando una matriz de prioridad

Tengo esta matriz de objetos:

 var eventList = [ { eventName: "abc", status: "completed" }, { eventName: "def", status: "live" }, { eventName: "ghi", status: "live" }, { eventName: "jkl", status: "upcoming" }, ]

Quiero ordenar esta matriz de objetos usando una matriz de prioridad de una clave específica, digamos ["live", "upcoming", "completed"] para el estado, lo que significa que todos los eventos en vivo van primero, seguidos de los próximos seguidos de completados. Las respuestas en todo Internet parecen que solo puede ordenar objetos de matriz usando teclas como ascendente o descendente. ¿Cómo me acerco a esto?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Podría hacerlo usando el método Array.prototype.sort() con una matriz de ordenación.

 const eventList = [ { eventName: 'abc', status: 'completed', }, { eventName: 'def', status: 'live', }, { eventName: 'ghi', status: 'live', }, { eventName: 'jkl', status: 'upcoming', }, ]; const order = ['live', 'upcoming', 'completed']; eventList.sort((x, y) => order.indexOf(x.status) - order.indexOf(y.status)); console.log(eventList);

Si desea que la búsqueda de índices sea más rápida al ordenar, puede usar Map Object .

 const eventList = [ { eventName: 'abc', status: 'completed', }, { eventName: 'def', status: 'live', }, { eventName: 'ghi', status: 'live', }, { eventName: 'jkl', status: 'upcoming', }, ]; const order = ['live', 'upcoming', 'completed']; const map = new Map(); order.forEach((x, i) => map.set(x, i)); eventList.sort((x, y) => map.get(x.status) - map.get(y.status)); console.log(eventList);

over 4 years ago · Santiago Trujillo Denunciar

0

Puede hacer esto sin clasificar por una complejidad de tiempo lineal agrupando primero su matriz según el status y luego usando .flatMap() en su matriz de orden. Para cada valor en la matriz ordenada, puede tomar el valor agrupado de la agrupación en O(1) (es decir, instantáneamente) y mapear esos objetos agrupados. Como está utilizando flatMap, estos objetos agrupados se aplanarán en la matriz resultante:

 const eventList = [ { eventName: "abc", status: "completed" }, { eventName: "def", status: "live" }, { eventName: "ghi", status: "live" }, { eventName: "jkl", status: "upcoming" }, ]; const order = ["live", "upcoming", "completed"]; const grouped = eventList.reduce( (map, o) => map.set(o.status, (map.get(o.status) || []).concat(o)), new Map ); const result = order.flatMap(status => grouped.get(status) || []); console.log(result);

over 4 years ago · Santiago Trujillo 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