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

115
Vistas
Ordenar objeto de matriz usando el tiempo

Tengo una serie de objetos como este:

 arr = [ { id: '5', Time: '01:00', status: 'grey' }, { id: '7', Time: '12:00', status: 'grey' }, { id: '8', Time: '12:45', status: 'green' }, ]

Resultado que estoy tratando de obtener así:

 [ { id: '7', Time: '12:00', status: 'grey' }, { id: '8', Time: '12:45', status: 'green' }, { id: '5', Time: '01:00', status: 'grey' }, ]

Estoy haciendo algo como esto pero no funciona:

 arr = arr.sort(function (a, b) { var a1 = a.Time; var b1 = b.Time; if (a1 == b1) return 0; return a1 > b1 ? 1 : -1; });

Durante la depuración noté, por ejemplo arr[0].Time > arr[1].Time me da false , pero "1:00" > "12:00" me da true .

Mi consola de depuración está debajo.

ConsoleLog

Estoy usando Chrome y Firefox y ambos dan los mismos resultados. ¿Alguna idea?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede convertirlos en un objeto Fecha.

 const birthday = new Date('1995-12-17T03:24:00') // change 03:24

Entonces puedes comparar dos fechas. en una ida

 arr = [{ id: '5', Time: '01:00', status: 'grey' }, { id: '7', Time: '12:00', status: 'grey' }, { id: '8', Time: '12:45', status: 'green' }, ] arr.sort(function(a,b) { var date1 = (new Date("2000-01-01T" + a.Time + ":00")).getTime() var date2 = (new Date("2000-01-01T" + b.Time + ":00")).getTime() return (date1 < date2 ? -1 : (date1 > date2 ? 1 : 0)) }) console.log(arr)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Como usted dice que todos estos tiempos están en PM, la notación de 12 horas no se basa en cero (12, 1, 2, ... 11). Probablemente sea más fácil convertir estos tiempos a una notación basada en cero, en cuyo caso 00:00 y 00:45 vienen antes de 01:00 .

Para lograr esto simplemente podemos tomar el resto de las horas si lo dividimos por 12.

 const zeroBasedHour = hour % 12; // 0-11, instead of 12, 1-11

Vamos a crear una función que haga la conversión y sume los minutos en forma decimal.

 // 12-hour notation without am/pm. // The initial 0 in 03:45 is optional. function decimalTime(timeNotation) { const [, hours, minutes] = timeNotation.match(/^(\d?\d):(\d\d)$/); return parseInt(hours, 10) % 12 + parseInt(minutes, 10) / 60; }

Esta función convertiría 12:00 al valor decimal 0 . 12:45 se convierte al valor decimal 0.75 . Y 01:00 se convierte en 1 . Esto hace que clasificar la matriz en función del tiempo sea muy fácil.

 const arr = [ { id: '5', Time: '01:00', status: 'grey' }, { id: '7', Time: '12:00', status: 'grey' }, { id: '8', Time: '12:45', status: 'green' }, ]; arr.sort((a, b) => decimalTime(a.Time) - decimalTime(b.Time)); console.log(arr); function decimalTime(timeNotation) { const [, hours, minutes] = timeNotation.match(/^(\d?\d):(\d\d)$/); return parseInt(hours, 10) % 12 + parseInt(minutes, 10) / 60; }

Tenga en cuenta que lo anterior supone que todos los horarios son AM o PM, pero no una combinación de los dos. Puede agregar muy fácilmente soporte AM/PM agregando 12 adicionales al valor final si la hora provista es PM. Tenga en cuenta que la función a continuación ya no acepta una hora sin AM/PM.

 // 12-hour notation with am/pm. // The initial 0 in 03:45 is optional. // The space between the time and am/pm is also optional. // am/pm is case insensitive. function decimalTime(timeNotation) { const modifiers = { am: 0, pm: 12 }; const [, hours, minutes, modifier] = timeNotation.match(/^(\d?\d):(\d\d) ?(am|pm)?$/i); return parseInt(hours, 10) % 12 + modifiers[modifier.toLowerCase()] + parseInt(minutes, 10) / 60; }
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