根据字母排序,然后按数字排序

时间:2019-08-14 10:37:23

标签: javascript string algorithm typescript sorting

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

INPUT
data[4,a,3,a,a,2]

OUTPUT(ascending expected)
data[a,a,a,2,3,4]

但升序时,它会先对数字进行排序,然后对日期进行排序,反之亦然。这与我想要实现的目标相反。如何使其升序先排序,降序先排序

1 个答案:

答案 0 :(得分:1)

测试第一个字符是否为数字。

如果两个比较项相同,则定期进行比较,否则先移动非数字:

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