排序键的大小写对瑞典字符不敏感

时间:2019-05-18 12:03:37

标签: javascript arrays string object

我正在尝试使用带有瑞典字符的键以字母“自然排序顺序”对数组进行排序。这是测试数组:

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

理想的结果是创建数组的顺序(abc,ABC,测试,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 个答案:

答案 0 :(得分:2)

不要使用toLowerCase,而只需将sortlocaleCompare一起使用:

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 :(得分:1)

您的代码似乎可以正常工作。不过,您不应使用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);

答案 2 :(得分:1)

您可以像这样简单地将适当的参数添加到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'

答案 3 :(得分:0)

我终于找到了一种似乎运行良好的方法,至少在新版本的Chrome,Safari和Opera中是如此。这个问题非常有帮助: How to sort special letters (typescript)?

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/