Это довольно круто.У меня есть эта простая функция, которая сортирует массив коллекций по одному из своих полей.
Вот пример массива:
"countries": [
{
"id": "AW",
"name": "Aruba",
"nameeng": "Aruba",
"capital": "Oranjestad",
"currency": "AWG",
"phonecode": "297"
},
{
"id": "BM",
"name": "Bermuda",
"nameeng": "Bermuda",
"capital": "Hamilton",
"currency": "BMD",
"phonecode": "1"
},
{
"id": "GR",
"name": "Ελλάδα",
"nameeng": "Greece",
"capital": "Athens",
"currency": "EUR",
"phonecode": "30"
}];
Это продолжается дольше, но я думаю, вы поняли идею.А вот и функция:
sortArray(source: any[], key) {
let result = source.sort((a, b) => {
return a[String(key)].localeCompare(b[String(key)]);
});
return result;
}
Теперь загадка.Если я вызову функцию следующим образом:
countries_sorted = sortArray(countries, 'nameeng');
, то в результате получится хаос, элементы массива будут возвращены в кажущемся случайном порядке.
Однако, если я жестко закодирую имя поля вфункция выглядит следующим образом:
sortArray(source: any[], key) {
let key = 'nameeng';
...
}
тогда он работает отлично!
Я проверил это с помощью console.log()
, параметр обрабатывается правильно, тип String.И все же сортировка не произойдет, если я передам ее, только если я жестко закодирую ее.
Lodash не является решением, поскольку он не может сортировать символы с акцентом.