發(fā)布于:2021-02-21 00:00:30
0
266
0
字符串可以在任何編程語(yǔ)言中產(chǎn)生很多問(wèn)題。無(wú)論是簡(jiǎn)單的字符串,包含表情符號(hào),html實(shí)體甚至是帶重音符號(hào)的字符串,如果我們不清理數(shù)據(jù)或做出正確的字符串處理選擇,我們可能會(huì)遭受重創(chuàng)。
在瀏覽的時(shí)候,我發(fā)現(xiàn)了一個(gè)尚未遇到的字符串情況(...我可能有,但沒(méi)有注意到):對(duì)重音字符進(jìn)行排序以獲得所需的結(jié)果。事實(shí)是,重音字符的處理方式與您在排序時(shí)所想的有所不同:
// 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-重音符號(hào)不能簡(jiǎn)單地跟隨其對(duì)應(yīng)的重音符號(hào)。通過(guò)采取額外的步驟,即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"]
沒(méi)有帶重音符號(hào)的附加混亂,本地化已經(jīng)是一個(gè)巨大的挑戰(zhàn)。保持localeCompare和Intl.Collator 記住每一次你想排序字符串!
作者介紹
熱門(mén)博客推薦