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

303
Visualizações
Dart compareTo () a veces devuelve un resultado diferente que javascript localeCompare ()

Estoy buscando una función de javascript que compare dos cadenas de forma "estándar", o al menos de la misma manera que lo hace en dart .

Tengo este código en dart que da dos cadenas, comprueba cuál es la más grande y crea una sola cadena separada por un "-" con la cadena más grande al frente.

 //dart code void main() { String currentUserId = "bbijdF7zKgR7jOIAs7Ka86jwdRu1"; String peerId = "UVvUo4xCM4N4TtiFWL5B6vOFzN53"; String groupChatId = ""; if (currentUserId.compareTo(peerId) > 0) { groupChatId = '$currentUserId-$peerId'; } else { groupChatId = '$peerId-$currentUserId'; } print(groupChatId); }

La impresión devolverá bbijdF7zKgR7jOIAs7Ka86jwdRu1-UVvUo4xCM4N4TtiFWL5B6vOFzN53

Hasta ahora ningún problema.

Ahora debería replicar este código en javascript y encontré la función de enlace localeCompare que debería hacer lo mismo que el enlace compareTo() en dart. Pero no es así ya que, en el caso de las dos cadenas, tienen resultados diferentes.

 //js code var currentUserId = "bbijdF7zKgR7jOIAs7Ka86jwdRu1"; var peerId = "UVvUo4xCM4N4TtiFWL5B6vOFzN53"; var groupChatId = ""; if (currentUserId.localeCompare(peerId) > 0) { groupChatId = `${currentUserId}-${peerId}` } else { groupChatId = `${peerId}-${currentUserId}` } console.log(groupChatId)

La impresión devolverá UVvUo4xCM4N4TtiFWL5B6vOFzN53-bbijdF7zKgR7jOIAs7Ka86jwdRu1

Hay casos raros en los que dan dos resultados diferentes, pero ese es precisamente el problema. ¿Hay alguna función en javascript que se comporte como compareTo en dart?

Si alguien pudiera explicarme porque estas dos funciones a veces difieren en el resultado se lo agradeceria mucho

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

0

En Dart, compareTo ordena la cadena por el punto de código del carácter, pero cuando se usa localeCompare las cadenas se comparan en orden lexicográfico según el idioma actual del usuario. Además, el resultado de localeCompare puede no ser consistente entre usuarios con diferentes configuraciones regionales.

Una mejor manera de comparar sus cadenas sería agregarlas a una matriz y .sort() . Esto también ordena por punto de código y será coherente independientemente de la configuración regional del usuario. Sin embargo, dado que primero desea la cadena de valor más bajo, necesitará una función de clasificación personalizada para manejar esto.

Luego, en lugar de usar cadenas literales para combinar, simplemente .join() la matriz con el carácter - .

 let userId = "bbijdF7zKgR7jOIAs7Ka86jwdRu1"; let peerId = "UVvUo4xCM4N4TtiFWL5B6vOFzN53"; let chatId = [userId, peerId].sort( new Intl.Collator('en', { caseFirst: 'lower' }).compare ).join('-'); console.log(chatId);

Esto ha demostrado ser sorprendentemente difícil. Esperemos que esta solución se comporte como espera en todas las circunstancias.

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