带重音字符的字符串排序

发布于:2021-02-21 00:00:30

0

229

0

重音字符 字符串 排序 JavaScript

字符串可以在任何编程语言中产生很多问题。无论是简单的字符串,包含表情符号,html实体甚至是带重音符号的字符串,如果我们不清理数据或做出正确的字符串处理选择,我们可能会遭受重创。

在浏览的时候,我发现了一个尚未遇到的字符串情况(...我可能有,但没有注意到):对重音字符进行排序以获得所需的结果。事实是,重音字符的处理方式与您在排序时所想的有所不同:

// Spanish
['único','árbol', 'cosas', 'fútbol'].sort();
// ["cosas", "fútbol", "árbol", "único"] // bad order

// German
['Woche', 'wöchentlich', 'wäre', 'Wann'].sort();
// ["Wann", "Woche", "wäre", "wöchentlich"] // bad order

Yikes-重音符号不能简单地跟随其对应的重音符号。通过采取额外的步骤,即localeCompare,我们可以确保我们的字符串首先按照我们想要的方式排序:

['único','árbol', 'cosas', 'fútbol'].sort(function (a, b) {
 return a.localeCompare(b);
});
// ["árbol", "cosas", "fútbol", "único"]

['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(function (a, b) {
 return a.localeCompare(b);
});
// ["Wann", "wäre", "Woche", "wöchentlich"]

// Or even use Intl.Collator!
['único','árbol', 'cosas', 'fútbol'].sort(Intl.Collator().compare);
// ["árbol", "cosas", "fútbol", "único"]

['Woche', 'wöchentlich', 'wäre', 'Wann'].sort(Intl.Collator().compare);
// ["Wann", "wäre", "Woche", "wöchentlich"]

没有带重音符号的附加混乱,本地化已经是一个巨大的挑战。保持localeCompare和Intl.Collator 记住每一次你想排序字符串!