String.prototype.localeCompare 的坑

使用 gulp-inject 注入到頁面之前,需要對文件進行排序。在使用排序方法時發(fā)現(xiàn) String.prototype.localeCompare 的這個方法在 MacWindows 環(huán)境結果不同。

使用 localeCompare 測試

[‘A', 'a', 'B', 'b'].sort(function(a, b) { return a.localeCompare(b); })
mac
[ 'A', 'B', 'a', 'b' ]
windows
[ ‘a(chǎn)', 'A', 'b', 'B' ]

不使用 localeCompare 測試

[‘A’, ‘a(chǎn)’, ‘B’, 'b'].sort();
mac
[ 'A', 'B', 'a', 'b' ]
windows
[ 'A', 'B', 'a', 'b' ]

根據(jù) String.prototype.localeCompare() - JavaScript | MDN 說明,localeCompare 方法是和操作系統(tǒng) locale 值相關。

我們可以使用 localeCompare 函數(shù)的第二個參數(shù) localeBCP 47 language 擴展 kf 參數(shù)來確定大小寫優(yōu)先順序。

但首先需要先了解什么是 BCP 47 language tag ,啊,好麻煩...

也可以自定義檢測字符大小寫的函數(shù)作為 localCompare 的比較器

function caseInsensitiveComparator(valueA, valueB) {
    var valueALowerCase = valueA.toLowerCase();
    var valueBLowerCase = valueB.toLowerCase();

    if (valueALowerCase < valueBLowerCase) {
        return -1;
    } else if (valueALowerCase > valueBLowerCase) {
        return 1;
    } else { //valueALowerCase === valueBLowerCase
        if (valueA < valueB) {
            return -1;
        } else if (valueA > valueB) {
            return 1;
        } else {
            return 0;
        }
    }
}

參考:

How to perform case insensitive sorting in Javascript? - Stack Overflow

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容