reactjs 字母数字和数字字符串排序未按预期工作

uqcuzwp8  于 2023-02-03  发布在  React
关注(0)|答案(1)|浏览(116)

我实现了下面的逻辑来对混合数据(包含字母数字和数字值)进行排序,但它没有按预期排序。

/*For numeric value sorting */
if (!isNaN(fVal) && !isNaN(lastVal)) {
    switch (policy) {
        case SORT_BY_DESC:
            return +fVal < +lastVal ? 1 : -1;
        case SORT_BY_ASC:
            return +fVal > +lastVal ? 1 : -1;
        default:
            return 0;
    }
} 
/* For alphanumeric sorting */
else {
    switch (policy) {
        case SORT_BY_DESC:
            return fVal < lastVal ? 1 : -1;
        case SORT_BY_ASC:
            return fVal > lastVal ? 1 : -1;
        default:
            return 0;
    }
}

如果所有的值都是数值,这个逻辑工作正常,但是如果我有混合数据,它就不能正确排序。

    • 预期结果-**

数据按降序排列-63372A1021、63372A1019、60091A0222、7776、6789、633
数据按升序排列-633、、6667、6789、7776、60091A0222、63372A1019、63372A1021
"我得到的是--"
降序排列-7776、6789、6667、63372A1021、63372A1019、633、60091A0222
升序排列-60091A0222、633、63372A1019、63372A1021、6667、6789、7776

qv7cva1a

qv7cva1a1#

您可以检查有限性并将此值排序到顶部。

const
    data = ['60091A0222', 633, '63372A1019', '63372A1021', 6667, 6789, 7776],
    asc = (a, b) => isFinite(b) - isFinite(a) || (a > b) - (a < b),
    desc = (a, b) => isFinite(a) - isFinite(b) || (a < b) - (a > b)

data.sort(asc);
console.log(...data);

data.sort(desc);
console.log(...data);

相关问题