定義:用本地特定的順序來比較兩個字符串。
語法:stringObject.localeCompare(target)
參數:target——要以本地特定的順序與 stringObject 進行比較的字符串。
返回值:說明比較結果的數字。
(1)如果 stringObject 小於 target,則 localeCompare() 返回小於 0 的數。
(2)如果 stringObject 大於 target,則該方法返回大於 0 的數。
(3)如果兩個字符串相等,或根據本地排序規則沒有區別,該方法返回 0。
說明:把 < 和 > 運算符應用到字符串時,它們只用字符的 Unicode 編碼比較字符串,而不考慮當地的排序規則。以這種方法生成的順序不一定是正確的。localeCompare() 方法提供的比較字符串的方法,考慮了默認的本地排序規則。ECMAscript 標准並沒有規定如何進行本地特定的比較操作,它只規定該函數采用底層操作系統提供的排序規則。
實例:
1、可以使用localeCompare() 方法來實現中文按照拼音排序,方法相當簡單
var array = ['白鴿', '麻雀', '大象', '狗', '貓', "雞"]; array = array.sort(function compareFunction(item1, item2) { return item1.localeCompare(item2); }); //["白鴿", "大象", "狗", "雞", "麻雀", "貓"]
而且可以通過如下代碼實現中文按照拼音排序,並且可以將中文按照a,b,c,d……進行區分。代碼如下:
function pySegSort(arr,empty) { if(!String.prototype.localeCompare) return null; var letters = "*abcdefghjklmnopqrstwxyz".split(''); var zh = "阿八嚓噠妸發旮哈譏咔垃痳拏噢妑七呥扨它穵夕丫帀".split(''); var segs = []; var curr; $.each(letters, function(i){ curr = {letter: this, data:[]}; $.each(arr, function() { if((!zh[i-1] || zh[i-1].localeCompare(this) <= 0) && this.localeCompare(zh[i]) == -1) { curr.data.push(this); } }); if(empty || curr.data.length) { segs.push(curr); curr.data.sort(function(a,b){ return a.localeCompare(b); }); } }); return segs; } console.log(JSON.stringify(pySegSort(['白鴿', '麻雀','黑','大象', '狗', '貓','媽媽','馬', "雞",'瘦','胖'])));
結果顯示為:[{"letter":"b","data":["白鴿"]},{"letter":"d","data":["大象"]},{"letter":"g","data":["狗"]},{"letter":"h","data":["黑"]},{"letter":"j","data":["雞"]},{"letter":"m","data":["媽媽","麻雀","馬","貓"]},{"letter":"p","data":["胖"]},{"letter":"s","data":["瘦"]}];通過這個就可以寫一個電話薄,像現在手機上面的,通過人名來進行分組、排序,之后再通過循環和布局就可以實現電話薄的功能。
2、實現字母、數字的混合排序:
var d = [1,2,3,'a','k','b','d',10,20,'c'] d.sort(function(a,b){ var c = isFinite(a), // 如果 number 是有限數字(或可轉換為有限數字),那么返回 true。否則,如果 number 是 NaN(非數字),或者是正、負無窮大的數,則返回 false。
d = isFinite(b); return (c != d && d - c) || a > b; }) console.log(d); //[1, 2, 3, 10, 20, "a", "b", "c", "d", "k"]
isFinite() 判斷a、b是否是數字。
return 后面的語句:
c != d && c - d 如果c和d不相等 ,也就是說比較的值不是同一類型。那就比較 c-d的值是1還是-1(中間進行了隱式類型轉換)
如果c == d 也就是說c、d是同一類型的值,c、d可能都是字母,也可能都是數字。這里就可以直接比較大小了(都是字母的話不能直接做減法)。
isFinite() 函數用於檢查其參數是否是無窮大。如果 number 是有限數字(或可轉換為有限數字),那么返回 true。否則,如果 number 是 NaN(非數字),或者是正、負無窮大的數,則返回 false。