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