JavaScript sort () с localeCompare () не работает с переданным параметром - PullRequest
0 голосов
/ 08 мая 2018

Это довольно круто.У меня есть эта простая функция, которая сортирует массив коллекций по одному из своих полей.

Вот пример массива:

"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 не является решением, поскольку он не может сортировать символы с акцентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...