Ordenando cadenas con caracteres acentuados
Javascript tiene un método nativo sort que permite ordenar arrays. Haciendo una simple array.sort()
va a tratar a cada entrada de la matriz como una cadena y va a tratar de ordenarla alfabéticamente. También puede proporcionar la funcion own custom sorting.
['Shanghai', 'New York', 'Mumbai', 'Buenos Aires'].sort();
// ["Buenos Aires", "Mumbai", "New York", "Shanghai"]
Pero cuando intenta para un array de caracteres no ASCII como esto ['E', 'a', 'U', 'c']
, se obtendrá un resultado extraño `[’ c ‘,’ e ‘,’ A ‘,’ U ‘]’. Eso sucede porque sort sólo funciona con el idioma Inglés.
Mire el siguiente ejemplo:
// Spanish
['único','árbol', 'cosas', 'fútbol'].sort();
// ["cosas", "fútbol", "árbol", "único"] // bad order
// German
['Woche', 'wöchentlich', 'wäre', 'Wann'].sort();
// ["Wann", "Woche", "wäre", "wöchentlich"] // bad order
Afortunadamente, hay dos maneras de superar este comportamiento localeCompare and Intl.Collator.
Ambos métodos tienen sus propios parámetros personalizados con el fin de configurarlo para que funcione adecuadamente.
Usando localeCompare()
['único','árbol', 'cosas', 'fútbol'].sort(function (a, b) {
return a.localeCompare(b);
});
// ["árbol", "cosas", "fútbol", "único"]
['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(function (a, b) {
return a.localeCompare(b);
});
// ["Wann", "wäre", "Woche", "wöchentlich"]
Usando Intl.Collator()
['único','árbol', 'cosas', 'fútbol'].sort(Intl.Collator().compare);
// ["árbol", "cosas", "fútbol", "único"]
['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(Intl.Collator().compare);
// ["Wann", "wäre", "Woche", "wöchentlich"]
- Para cada método se puede personalizar la ubicación.
- De acuerdo a Firefox Intl.Collator es más rápida cuando se compara un gran número de cadenas.
Así que cuando se trabaja con arrays de cadenas en un idioma distinto del Inglés, recuerde utilizar este método para evitar la clasificación inesperado.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOWA short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW