gpt4 book ai didi

javascript - 排序功能未按预期工作

转载 作者:行者123 更新时间:2023-12-05 04:31:05 26 4
gpt4 key购买 nike

我有一个对象数组,它实际上是从后端获取的,现在我正在映射数据并希望在单击按钮时按升序和降序对它进行排序,所以我创建了一个 onSort 函数,但它是没有像我预期的那样工作,因为存在大写和小写问题,即使按字母顺序介于两者之间,小写字母也显示在最后,数字没有排序,还有另一列显示金额,如“100 美元”,但是由于那个美元符号,函数将它作为一个字符串并对其进行排序。

这就像

110 美元、12 美元、24000 美元、2500 美元、3 美元

应该是这样

3 美元、12 美元、110 美元、2500 美元、24000 美元

对于具有大写和小写元素的列,按升序排列 -

苹果香蕉,狗, Ant ,糖果

哪里应该是这样的-

Ant 、苹果、香蕉、糖果、狗

如果是数字 - 112,12,141,21,32,345,35;

应该是 - 12,21,32,35,112,141,345;

这里是我使用的代码片段,

const [sort, setSort] = usestate("asc")
const onSort = (obj: string) => {

if (sort === "asc") {
const tableEl= [...tstate.tableItem].sort((a: any, b: any) => {
if (a[obj].split('/').reverse().join() > b[obj].split('/').reverse().join()) return 1;
else if (b[obj].split('/').reverse().join() > a[obj].split('/').reverse().join()) return -1;
else return 0;
// return a[obj] > b[obj] ? 1 : -1;
});
setTableState({
...tstate,
tableItem: tableEl,
});
setSort("dsc")
}
if (sort === "dsc") {
const tableEl= [...tstate.tableItem].sort((a: any, b: any) => {
if (b[obj].split('/').reverse().join() > a[obj].split('/').reverse().join()) return 1;
else if (a[obj].split('/').reverse().join() > b[obj].split('/').reverse().join()) return -1;
else return 0;
// return b[obj] > a[obj] ? 1 : -1;
});
setTableState({
...tstate,
tableItem: tableEl,
});
setSort("asc")
}
};

最佳答案

使用localCompare检查区分大小写的方法。因为你想检查数字使用 isNaN方法。

function compare(a, b) {
if ( isNaN(Number(a) || isNaN(Number(b) )) {
return b.localeCompare(a)
} else {
if (Number(a)>Number(b)) return 1
else if (Number(a)<Number(b)) return -1
else return 0
}
}

现在在sort方法中使用这个函数

[...tstate.tableItem].sort(compare)

关于javascript - 排序功能未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71923442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com