發(fā)布于:2021-02-21 00:00:30
0
266
0
字符串可以在任何編程語言中產(chǎn)生很多問題。無論是簡單的字符串,包含表情符號,html實體甚至是帶重音符號的字符串,如果我們不清理數(shù)據(jù)或做出正確的字符串處理選擇,我們可能會遭受重創(chuàng)。
在瀏覽的時候,我發(fā)現(xiàn)了一個尚未遇到的字符串情況(...我可能有,但沒有注意到):對重音字符進行排序以獲得所需的結果。事實是,重音字符的處理方式與您在排序時所想的有所不同:
// 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"]
沒有帶重音符號的附加混亂,本地化已經(jīng)是一個巨大的挑戰(zhàn)。保持localeCompare和Intl.Collator 記住每一次你想排序字符串!