我必须对包含日期和单词的数组进行排序。所有数据都被视为字符串
INPUT
data[4,a,3,a,a,2]
OUTPUT(ascending expected)
data[a,a,a,2,3,4]
但当升序时,它会先对数字排序,然后对日期排序,反之亦然。这与我想要达到的目标正好相反如何使它在升序时先对字母排序,在降序时先对数字排序
最佳答案
测试第一个字符是否为数字。
如果两者的比较结果相同,请定期比较,否则请先移动非数字:
var data = ["2020-04-07",
"2021-06-30",
"2019-12-30",
"date passed",
"date passed",
"date passed"];
function specialSortAsc(a, b) {
var isNumberRegEx = /^\d/;
if (isNumberRegEx.test(a[0]) == isNumberRegEx.test(b[0])) {
return a.localeCompare(b);
}
else {
return isNumberRegEx.test(a[0]) ? 1 : -1;
}
}
function specialSortDsc(a, b) {
var isNumberRegEx = /^\d/;
if (isNumberRegEx.test(a[0]) == isNumberRegEx.test(b[0])) {
return b.localeCompare(a);
}
else {
return isNumberRegEx.test(a[0]) ? -1 : 1;
}
}
console.log(data.sort(specialSortAsc));
console.log(data.sort(specialSortDsc));