我看了一个旧线程,我得到的答案并没有真正起作用,因为特殊情况'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>']
答案 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);