不考虑大小写和重音的字符串比较
在JavaScript中,比较和排序字符串是相当常见的操作。通常情况下,使用String.prototype.localeCompare()
就足以在大多数场景下对字符串数组进行排序。然而,处理重音和大小写可能会变得棘手,并导致意外的结果。这就是Intl.Collator
发挥作用的地方,它是一个用于语言敏感的字符串比较的对象。使用Intl.Collator.prototype.compare()
,您可以对字符串进行排序,而不考虑它们的大小写或重音,甚至可以接受一个区域设置参数。
const arr = ['ä', 'a', 'b', 'A', 'B', 'Å'];
const localeCompare = (a, b) => a.localeCompare(b);
const collator = new Intl.Collator();
const deCollator = new Intl.Collator('de');
const svCollator = new Intl.Collator('sv');
arr.sort(localeCompare); // ['a', 'A', 'Å', 'ä', 'b', 'B']
arr.sort(collator.compare); // ['a', 'A', 'Å', 'ä', 'b', 'B']
arr.sort(deCollator.compare); // ['a', 'A', 'Å', 'ä', 'b', 'B']
arr.sort(svCollator.compare); // ['a', 'A', 'b', 'B', 'Å', 'ä']