我正在尝试使用带有瑞典字符的键以字母“自然排序顺序”对数组进行排序。这是测试数组:
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/
感谢您对帮助排序(!)的任何帮助。
答案 0 :(得分:2)
不要使用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 :(得分: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/