我有一个对象数组,实际上是从后端获取的,现在我正在映射数据,并希望通过单击按钮按升序和降序对其进行排序,所以我创建了一个 onSort 函数,但它不起作用我预计,因为大写和小写问题存在,即使按字母顺序排列,最后显示小写,数字没有排序,还有另一列显示类似“$100”的金额,但由于这个原因美元符号,函数将其作为字符串并对其进行排序。
这就像
110 美元、12 美元、24000 美元、2500 美元、3 美元
它应该像
3 美元、12 美元、110 美元、2500 美元、24000 美元
对于具有大写和小写元素的列,按升序排列 -
苹果
香蕉,
狗,
蚂蚁,
糖果
哪里应该是这样的 -
蚂蚁、苹果、香蕉、糖果、狗
如果是数字,则类似 - 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")
}
};