сортировка по JavaScript с использованием Юникода - PullRequest
23 голосов
/ 02 августа 2011

Существует множество примеров для сортировки некоторого массива JSON по некоторому свойству (т. Е. 'Title') Мы используем функцию сравнения, подобную этой:

function sortComparer(a, b) {
        if (a.title == b.title)
            return 0;
        return a1 > b1 ? 1 : -1;
    }

Проблема в том, что порядок сербского латинского алфавита выглядит как "A, B, C, Č, Ć, D, ..." При использовании sortComparer выше, я получаю D отсортирован перед "Č" или "Ć". Любая идея, как сортировать с учетом современной культуры языка?

Ответы [ 2 ]

33 голосов
/ 02 августа 2011

Если локаль в вашей системе установлена ​​правильно, вы можете использовать метод localeCompare вместо больше чем для сравнения строк - этот метод осведомлен о локали.

function sortComparer(a,b){
    return a.title.localeCompare(b.title)
};
1 голос
/ 09 октября 2017

Для сортировки массива с пользовательскими настройками выполните следующие действия:

  1. Создайте массив с пользовательским порядком алфавитов:

    var alphabets = ["A", "B", "C", "Č", "Ć", "D","Dž","Đ","E","F","G","H","I","J","K","L","Lj","M","N","Nj","O","P","R","S", "ÛŒ","T","U","V","Z","Ž"];

  2. Создать список тестового массива:

    var testArrray = ["B2","D6","A1","Ć5","Č4","C3"];

  3. Создать имя функции сортировки:

    function OrderFunc(){
              testArrray.sort(function (a, b) {
                  return CharCompare(a, b, 0);
              });
          }
    
  4. создать функцию CharCompare (индекс: сортировать «AAAB» перед «AAAC»):

     function CharCompare(a, b, index) {
      if (index == a.length || index == b.length)
          return 0;
      //toUpperCase: isn't case sensitive
      var aChar = alphabets.indexOf(a.toUpperCase().charAt(index));
      var bChar = alphabets.indexOf(b.toUpperCase().charAt(index));
      if (aChar != bChar)
          return aChar - bChar
      else
          return CharCompare(a,b,index+1)
    

    }

  5. Вызовите OrderFunc для сортировкиtestArray (результат будет: A1, B2, C3, Č4, Ć5, D6).

Test Online

Удачи

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