我查看了一个旧线程,由于特殊情况“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>']
最佳答案
您应该使用最大代码单位,而不是使用任意“大”字符值,例如 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);
关于javascript - 最后以特殊字符排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515961/