我有以下任务:
类别中的所有项目都应按字母顺序排序,示例除外。特殊字符和数字应显示在字母之前。
我面临一个问题。大多数标准排序函数和插件都在使用 ASCII 表。本表中以下符号:~、}、{等的索引多于字母,例如: 实际排序结果为:
1 - #1 A T
2 - A T
3 - {C T
我需要得到:
1 - #1 A T
2 - {C T
3 - A T
请尽快给我你的建议或任何例子。
此致。
我有以下任务:
类别中的所有项目都应按字母顺序排序,示例除外。特殊字符和数字应显示在字母之前。
我面临一个问题。大多数标准排序函数和插件都在使用 ASCII 表。本表中以下符号:~、}、{等的索引多于字母,例如: 实际排序结果为:
1 - #1 A T
2 - A T
3 - {C T
我需要得到:
1 - #1 A T
2 - {C T
3 - A T
请尽快给我你的建议或任何例子。
此致。
这有点乏味,主要是为了防止 '100' 在 '2' 之前排序。
您可以将字符串拆分为单个字符和数字组。
在为任何 az 字符添加一些“权重”之后,对任何数字组(如数字)进行排序,并按字符代码对其他所有内容进行排序。
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
*/
“时间紧迫”解决方案:将数据切割成 3 个数组或列表:特殊字符、数字、字符。(测试是数字还是在'a'和'Z'之间)。在 Java 中使用 fe Collections.sort 或 Arrays.sort 对它们进行排序,这将对每个集合或数组进行排序,然后将它们附加在一起,但不再进行任何排序。我还没有测试过这个,但看起来它可能会工作