如何对特殊字母(打字稿)进行排序?
How to sort special letters (typescript)?
我想对 ts...sort 方法和 localCompare() 中的一些字母进行排序 Ä, Å, Ö,而不是 Å, Ä, Ö。如何正确排序任何字母?
我有一个对象列表:
class MyObj { id:number,
name: string,
type:number
}
I tried var list: MyObj[] = a list of objects
list.sort(function (a, b) {
return a.name.toUpperCase().localeCompare(b.name.toUpperCase());
});
更新
是的,georg 回答正确:我也发现了这个:
var strings = ["Ålex", "Ålex3", "Älex2"];
var sorter = new Intl.Collator("sv", { usage: "sort" });
strings.sort(sorter.compare);
同样的结果。
非常感谢!
非常重要
不要使用 localCompare,因为它在执行时非常糟糕。
使用Intl.Collator!
var browserLanguage = function () {
const defaultLanguage = "en";
const browserLanguage = this.window.navigator.language ||
(this.window as any).navigator.browserLanguage;
const currentLanguage = browserLanguage.split('-')[0];
if (supportedLanguages.indexOf(currentLanguage) < 0) {
return defaultLanguage;
} else {
return currentLanguage;
}
}
const intlCollator = new Intl.Collator(browserLanguage, { usage: "sort" });
list.sort(function (a, b) {
return intlCollator.compare(a.toUpperCase(), b.toUpperCase());
});
localeCompare
显然取决于语言环境,不同的语言环境使用不同的规则("collations")来比较扩展字符。例如,在英语中, A
带有不同变音符号的都是一样的,而瑞典语则区别对待:
console.log(["Älex2", "Ålex0", "Ålex3", "Alex1"].sort(( a, b ) => a.localeCompare(b, 'en')));
console.log(["Älex2", "Ålex0", "Ålex3", "Alex1"].sort(( a, b ) => a.localeCompare(b, 'sv')));
我想对 ts...sort 方法和 localCompare() 中的一些字母进行排序 Ä, Å, Ö,而不是 Å, Ä, Ö。如何正确排序任何字母?
我有一个对象列表:
class MyObj { id:number,
name: string,
type:number
}
I tried var list: MyObj[] = a list of objects
list.sort(function (a, b) {
return a.name.toUpperCase().localeCompare(b.name.toUpperCase());
});
更新
是的,georg 回答正确:我也发现了这个:
var strings = ["Ålex", "Ålex3", "Älex2"];
var sorter = new Intl.Collator("sv", { usage: "sort" });
strings.sort(sorter.compare);
同样的结果。
非常感谢!
非常重要
不要使用 localCompare,因为它在执行时非常糟糕。
使用Intl.Collator!
var browserLanguage = function () {
const defaultLanguage = "en";
const browserLanguage = this.window.navigator.language ||
(this.window as any).navigator.browserLanguage;
const currentLanguage = browserLanguage.split('-')[0];
if (supportedLanguages.indexOf(currentLanguage) < 0) {
return defaultLanguage;
} else {
return currentLanguage;
}
}
const intlCollator = new Intl.Collator(browserLanguage, { usage: "sort" });
list.sort(function (a, b) {
return intlCollator.compare(a.toUpperCase(), b.toUpperCase());
});
localeCompare
显然取决于语言环境,不同的语言环境使用不同的规则("collations")来比较扩展字符。例如,在英语中, A
带有不同变音符号的都是一样的,而瑞典语则区别对待:
console.log(["Älex2", "Ålex0", "Ålex3", "Alex1"].sort(( a, b ) => a.localeCompare(b, 'en')));
console.log(["Älex2", "Ålex0", "Ålex3", "Alex1"].sort(( a, b ) => a.localeCompare(b, 'sv')));