1

我有以下任务:

类别中的所有项目都应按字母顺序排序,示例除外。特殊字符和数字应显示在字母之前。

我面临一个问题。大多数标准排序函数和插件都在使用 ASCII 表。本表中以下符号:~、}、{等的索引多于字母,例如: 实际排序结果为:

1 - #1 A T
2 - A T
3 - {C T

我需要得到:

1 - #1 A T
2 - {C T
3 - A T 

请尽快给我你的建议或任何例子。

此致。

4

2 回答 2

0

这有点乏味,主要是为了防止 '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
*/
于 2010-05-14T13:46:21.937 回答
0

“时间紧迫”解决方案:将数据切割成 3 个数组或列表:特殊字符、数字、字符。(测试是数字还是在'a'和'Z'之间)。在 Java 中使用 fe Collections.sort 或 Arrays.sort 对它们进行排序,这将对每个集合或数组进行排序,然后将它们附加在一起,但不再进行任何排序。我还没有测试过这个,但看起来它可能会工作

于 2010-05-14T12:40:47.633 回答