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

301
Vistas
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 Respuestas
Responde la pregunta

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