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

187
Visualizações
¿Cómo ordenar la matriz por fecha?

tengo los siguientes datos:

 const data = [{date: "2022-05-10 13:36:00", open: 155.535, low: 155.4, high: 155.67, close: 155.44}, {date: "2022-05-10 13:35:00", open: 155.23, low: 155.2102, high: 155.62, close: 155.53}, {date: "2022-05-10 13:34:00", open: 154.97, low: 154.96, high: 155.29, close: 155.22}];

Estoy usando el siguiente código para ordenar los datos por fecha (del más antiguo al más nuevo):

 const data = [{date: "2022-05-10 13:36:00", open: 155.535, low: 155.4, high: 155.67, close: 155.44}, {date: "2022-05-10 13:35:00", open: 155.23, low: 155.2102, high: 155.62, close: 155.53}, {date: "2022-05-10 13:34:00", open: 154.97, low: 154.96, high: 155.29, close: 155.22}]; console.log(Object.entries(data).sort((([, a], [, b]) => { return new Date(a.date) - new Date(b.date) })).map(i=>{ return i[1]}))

En cromo se renderiza bastante bien, pero en safari no funcionará y mantendrá el orden original.

Mi pregunta es ¿qué hace esta diferencia y cómo hacer que el algoritmo de clasificación funcione en todos los navegadores?

¡Gracias!

PD: verifico esta pregunta, el método .sort() de Chrome y Safari javascript funciona de manera diferente , pero las respuestas indicaron que The sort is not necessarily stable , pero de acuerdo con mdn ahora:

Desde la versión 10 (o EcmaScript 2019), la especificación dicta que Array.prototype.sort es estable.

¿Qué me estoy perdiendo?

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

0

Ya tiene las fechas formateadas de manera adecuada para ordenarlas. Entonces podemos escribir un clasificador trivial para ellos:

 const sortByDate = (data) => data .sort (({date: a}, {date: b}) => a < b ? -1 : a > b ? 1 : 0) const data = [{date: "2022-05-10 13:36:00", open: 155.535, low: 155.4, high: 155.67, close: 155.44}, {date: "2022-05-10 13:35:00", open: 155.23, low: 155.2102, high: 155.62, close: 155.53}, {date: "2022-05-10 13:34:00", open: 154.97, low: 154.96, high: 155.29, close: 155.22}] console .log (sortByDate (data))
 .as-console-wrapper {max-height: 100% !important; top: 0}

No puede usar la resta para clasificar cadenas, pero puede hacer una clasificación lexicográfica. Es muy similar al formato ISO-8601, solo que la T central se reemplaza por un espacio. Se ordenará de la misma manera.

about 4 years ago · Juan Pablo Isaza Relatório

0

En Safari, el formato de fecha "YYYY-MM-DD hh:mm:ss" no es compatible y llamar a new Date() en dicho valor siempre devolverá Invalid Date . La ordenación falla esencialmente porque todos los valores son iguales después de la conversión de fecha.

Para resolver este problema, podrías

  • use el formato de fecha "YYYY/MM/DD hh:mm:ss"
    ex. new Date('YYYY-MM-DD hh:mm:ss'.replace(/-/g, "/"))

  • use el moment para la conversión de cadena a fecha (esto puede ser una exageración si no necesita un moment en ningún otro lugar de su código)

  • compare las cadenas de fecha ISO, ya que su orden lexicográfico es el mismo que el orden cronológico (como lo menciona @gre_gor en los comentarios)

  • reemplace el espacio en "YYYY-MM-DD hh:mm:ss" con una T , para obtener "YYYY-MM-DDThh:mm:ss" , que es otro formato aceptado (como se menciona en el hilo vinculado)

Puede haber otras soluciones también, pero entiendes la idea.

Para referencia:
fecha inválida en safari
https://techtalkbook.com/javascripts-new-date-does-not-work-on-ie-and-safari/

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