最后用特殊字符排序

时间:2016-09-15 16:22:44

标签: javascript

我看了一个旧线程,我得到的答案并没有真正起作用,因为特殊情况'zz','ZZZ'等。

array.sort(function(a,b) {
     return a.replace(/^\W+/, 'z').localeCompare(b.replace(/^\W+/, 'z'));
});

所以,我想出了我自己的调整版本,它是:

array.sort(function(a,b) {
     return a.replace(/^\W+/, 'Ω').localeCompare(b.replace(/^\W+/, 'Ω'));
});

但我觉得这是一个非常糟糕的做法,因为它是一个黑客。有没有更简单但更正确的方法呢?

输入:

 ['111', '-213', '_1231', 'aasda', 'zzadsa', '<da>']

预期产出:

 ['111', 'aasda', 'zzadsa', '-213', '_1231', '<da>']

1 个答案:

答案 0 :(得分:1)

您应使用最大代码单元,而不是使用ZΩ这样的任意“大”字符值:

 var last = String.fromCharCode(0xFFFF);
 function ignoreSpecialChars(x) {
     return x.replace(/\W/g, last);
 }
 function compare(a, b) {
     a = ignoreSpecialChars(a);
     b = ignoreSpecialChars(b);
     return (a>b)-(b>a);
 }

 array.sort(compare);