我必须对包含日期和单词的数组进行排序。所有数据都被视为字符串

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));

10-01 23:08