Сортировка ключей массива без учета регистра с шведскими символами - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь отсортировать массив по ключам с символами Швеции в алфавитном порядке «Естественный порядок сортировки».Это тестовый массив:

var test = [];
test["abc"] = [];
test["ABC"] = [];
test["test"] = [];
test["Test"] = [];
test["åäö"] = [];
test["ÅÄÖ"] = [];

Желаемый результат - это порядок создания массива (abc, ABC, test, Test, åäö, ÅÄÖ), но я не могу понять, как его получитьпорядок.

Я пытался использовать:

var sortedKeys = Object.keys(test).sort();

И:

var sortedKeys= Object.keys(test).sort(function (a, b) {
    return a.toLowerCase().localeCompare(b.toLowerCase());
});

Но я не могу получить желаемый порядок ключей.Вот jsfiddle с некоторыми тестами: https://jsfiddle.net/3cs491gq/

Спасибо за любую помощь, разбирающую (!) Это.

Ответы [ 4 ]

2 голосов
/ 18 мая 2019

Не используйте toLowerCase, а просто используйте sort с localeCompare:

var test = [];
test["ÅÄÖ"] = [];
test["abc"] = [];
test["ABC"] = [];
test["test"] = [];
test["Test"] = [];
test["åäö"] = [];

var sortedKeys = Object.keys(test).sort((a, b) => !/[a-z]/i.test(a) ? 1 : (/[a-z]/i.test(b) ? 0 : -1));

console.log(sortedKeys);
1 голос
/ 18 мая 2019

Вы можете просто добавить нужные параметры в localeCompare , например, так:

var test = [];
test["ÅÄÖ"] = [];
test["abc"] = [];
test["ABC"] = [];
test["test"] = [];
test["Test"] = [];
test["åäö"] = [];

var r = Object.keys(test).sort((a, b) => a.localeCompare(b, "sv", {sensitivity: 'case'}));

console.log(r);

В этом случае мы добавляем sv для Swedish и sensitivity: 'case' в качестве опции.

1 голос
/ 18 мая 2019

Ну, похоже, твой код работает.Вы не должны использовать toLowerCase, хотя.

Здесь я сделал тест для вас.

var test = [];
test["ÅÄÖ"] = [];
test["abc"] = [];
test["ABC"] = [];
test["test"] = [];
test["Test"] = [];
test["åäö"] = [];


var data =Object.keys(test).sort(function(a,b){
  return a.localeCompare(b);
});

console.log(data);
0 голосов
/ 18 мая 2019

Я наконец нашел способ, который, кажется, работает довольно хорошо, по крайней мере, в новых версиях Chrome, Safari и Opera. Этот вопрос был очень полезным: Как сортировать специальные буквы (машинопись)?

var test = [];
test["abc"] = [];
test["ABC"] = [];
test["test"] = [];
test["Test"] = [];
test["åäö"] = [];
test["ÅÄÖ"] = [];

var sortedKeys = Object.keys(test).sort(new Intl.Collator("sv", { usage: "sort" }).compare);

console.log(sortedKeys);

Здесь есть jsfiddle: https://jsfiddle.net/ryv4hjk5/

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