這是一個有點乏味,主要是爲了保持'100'在'2'之前排序。
您可以將字符串拆分爲單個字符和數字組。
對任何數字組排序,如數字,並在向任何a-z字符添加一些「權重」後,按字符代碼 排序其他所有內容。
Array.prototype.a1Sort= function(){
var a1, b1, rx=/(\d+)|(\D)/g, rd=/\d+/;
return this.sort(function(a, b){
a= a.toLowerCase().match(rx);
b= b.toLowerCase().match(rx);
while(a.length && b.length){
a1= a.shift();
b1= b.shift();
if(rd.test(a1) || rd.test(b1)){
if(!rd.test(a1)) return 1;
if(!rd.test(b1)) return -1;
if(a1!= b1) return a1-b1;
}
else{
a1= a1.charCodeAt(0);
b1= b1.charCodeAt(0);
if(a1> 96 && a1<123) a1+= 1000;
if(b1> 96 && b1<123) b1+= 1000;
if(a1!= b1) return a1= b1;
}
}
return a.length-b.length;
});
}
var s1=['#1 A T','A T','{C T'];
alert(s1.customSort())
/* returned value: (Array)
#1 A T,{C T,A T
*/
你說「類別內的所有項目都應該按照字母順序排序,但是不要完成句子。除非我們知道例外是什麼,否則我們無法幫助您。你能詳細說明一下嗎? – Pops 2010-05-15 16:24:06
抱歉誤會。示例 - 它是一類項目。所以它不會改變任務的主要意圖。 「類別內的所有項目都應按字母順序排序」 – user341203 2010-05-17 06:40:29