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

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

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

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