Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

300
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!