我必须对包含日期和单词的数组进行排序。所有数据都视为字符串
INPUT
data[4,a,3,a,a,2]
OUTPUT(ascending expected)
data[a,a,a,2,3,4]
但升序时,它会先对数字进行排序,然后对日期进行排序,反之亦然。这与我想要实现的目标相反。如何使其升序先排序,降序先排序
答案 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));