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

148
Visualizações
¿Cómo ordenar una matriz de objetos por múltiples claves?

Tengo esta matriz:

 let arr = [{ "guid": 1, creationDateTime: 1632180639045, "pricePerUnitPerHour": 5, "awardedSavingCalculationStatus": 1, divisible: true, }, { "guid": 2, creationDateTime: 2504091567119, "pricePerUnitPerHour": 20, "awardedSavingCalculationStatus": 1, divisible: true, }, { "guid": 3, creationDateTime: 1504095567183, "pricePerUnitPerHour": 5, "awardedSavingCalculationStatus": 1, divisible: true, }]

Necesito hacer la clasificación ascendente por estas tres propiedades precio por unidad por hora, divisible y creación fecha y hora.

Entonces, si, por ejemplo, dos objetos tienen valores iguales en precio por unidad por hora, la clasificación debería ser por propiedad divisible. Ahí divisible:true debería estar antes del objeto donde tenemos divisible:false.

Y al final, si tienen dos precios iguales, la propiedad divisible es verdadera, por ejemplo, la clasificación debe realizarse en función de la marca de tiempo: creaciónDateTime

lo que intenté

Encontré algunas respuestas en stackoverflow, pero allí él hace la clasificación por solo dos campos, pero no puedo encontrar una manera de ordenar por el tercero.

 arr.sort( function (a, b) { if (a.pricePerUnitPerHour === b.pricePerUnitPerHour) { return b.divisible - a.divisible; } if(a.divisible === b.divisible) { return new Date(a.creationDateTime) - new Date(b.creationDateTime) } return a.pricePerUnitPerHour > b.pricePerUnitPerHour ? 1 : -1; });

Aquí la clasificación funciona si los precios y los divisibles son los mismos, entonces se clasifican por ellos, pero en la fecha y hora de creación no se clasifican en orden ascendente.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Ordenar de la siguiente manera:

 arr.sort(function(a, b) { return a.pricePerUnitPerHour - b.pricePerUnitPerHour || -(a.divisible - b.divisible) || a.creationDateTime - b.creationDateTime; });

La operación de resta devolverá 0 si ambos valores son iguales (doh), en cuyo caso el código pasa a la siguiente comparación. El caso verdadero/falso debe invertirse ya que desea que 1 (verdadero) se ordene antes que 0 (falso).

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