排序功能未按预期工作

2023-12-15

我有一个对象数组,实际上是从后端获取的,现在我正在映射数据,并希望通过单击按钮按升序和降序对其进行排序,所以我创建了一个 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")
    }
  };

Use 语言环境比较检查区分大小写的方法。因为您想检查使用的数字isNaN method.

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
    }
}

现在在排序方法中使用这个函数

[...tstate.tableItem].sort(compare)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排序功能未按预期工作 的相关文章

随机推荐

  • jquery中div从右到左调整大小

    I 想要从右到左设置 div 标签的动画并调整其大小 默认情况下 我从示例中学习并发现它从左到右调整大小 但根据项目要求 我们希望将其按从右到左的顺序排列 我写的代码是 div style background url stripes JP
  • 在Java中如何连接两个字符串?

    我正在尝试在 Java 中连接字符串 为什么这不起作用 public class StackOverflowTest public static void main String args int theNumber 42 System o
  • 通过 HTML/css 关闭 Chrome/Safari 拼写检查 [重复]

    这个问题在这里已经有答案了 有没有办法对于网络开发人员关闭特定的 Chrome Safari WebKit 拼写检查input or textarea元素 我的意思是通过特殊的标签属性或专有的 CSS 指令 有一个CSS指令可以关闭大纲in
  • Visual Studio 2015 社区 Xamarin 跨平台模板缺失

    我使用 Xamarin 安装了 Visual Studio 2015 Community Update 3 更新了 Xamarin 一切正常 但突然 当我尝试创建新项目时 Xamarin 跨平台模板丢失了 我不再有这些模板了 我只有这些 我
  • 将复杂的字符串解析为日期时间

    有人可以告诉我应该如何将以下格式转换为正确的格式DateTime object 11 50 46 AM on Wednesday October 19 2011 string s 11 50 46 AM on Wednesday Octob
  • C# 运行程序并获取运行后的环境变量

    我尝试使用 C 运行两个批处理脚本 然后查看它们如何影响环境 我的代码是 string finalEnvVarsFile Path GetTempFileName string arguments string Format c 0 1 s
  • Git 子树。为什么我不能从子树而不是根开始分支?

    我正在努力尝试理解使用 Git 子树策略 我的目的是将一些不同的存储库整合到一个伞形存储库下的一个玩具存储库小家族中 我正在使用此处详细介绍的子树策略 http help github com subtree merge 我正在绞尽脑汁地试
  • 由用户重命名的按钮

    我在编写某些按钮时遇到问题 这是我到目前为止所得到的 Public Class Form1 Dim Button 12 As Button Dim X As Integer Private Sub EventName Dim message
  • C++ 带权重的随机不重复整数

    我想有效地生成 封闭 范围内唯一 非重复 整数的随机样本 0 rnd max 范围内的每个数字都可以选择 并且每个数字都与样本权重相关联 权重越大 选择该数字的可能性就越大 概率恰好weight i sum weight not taken
  • @property 和 @synthesize 在 Objective-C 中的用途是什么?

    有什么用 财产 and 合成 您能举个例子解释一下吗 非常简短的答案 他们为 ivars 创建访问器 有维基百科上的一些例子 看看那些
  • Matlab:是否有一个函数可以定位数字中的“n”位(即“75673”中的第二位数字,所以5)

    我有一个号码A 7654321 我需要位置 5 处的数字 从开头算起 或从末尾算起的数字 3 在本例中为 3 是否有一个函数可以执行以下操作 getdigit A n 其中 A 是数字 n 是我想要的数字的位置 我可以将数字转换为文本字符串
  • 仍然无法理解 ASP.NET 事件。他们有什么意义?

    也许我很慢 但我只是不明白为什么你会使用不是从实际操作 例如单击 派生的事件 当您只需调用方法时 为什么要经历创建委托和事件的繁琐工作呢 看起来 当您创建一个事件时 您所做的只是创建一种方法 让调用者通过一些复杂的过程来调用一个简单的方法
  • 如何将 ASP.NET 下拉列表 DataTextField 属性绑定到嵌套属性

    我想绑定DataTextFieldASP NET 下拉控件的属性到作为初始数据源的属性的对象的属性 我将如何完成这项特定任务 下拉数据源数据架构 public class A public string ID get set public
  • ajax请求后页面刷新

    好吧 我有一个简单的表格 仅包含一个text field 当我们点击提交时 写入文本字段的数据将存储在数据库中 通过ajax存储 ajax 工作正常并且数据已提交 但是页面会自动刷新并且 URL 包含输入字段的内容 我的表格
  • 我应该使用多个数据库吗?

    我即将使用 Ruby on Rails 创建一个应用程序 我想使用多个数据库 基本上是一个会计应用程序 每个用户都有多个公司 我想为每个公司创建一个数据库 我找到了这个帖子http programmerassist com article
  • Fiware - 上下文代理:NGSIv2 订阅问题

    我正在使用 Orion 上下文代理版本 1 2 0 我使用 NGSIv2 订阅了两个不同的 cygnus 0 11 和 0 13 如下 curl 172 21 0 23 1026 v2 subscriptions s S header Fi
  • 查找重复的图像文件

    我的硬盘中存储了大约 1 TB 的图像 这些是朋友和家人长时间拍摄的照片 从某种意义上说 这些图片中的许多都是重复的 相同的文件保存在不同的位置 可能也具有不同的名称 我想问是否有任何工具 实用程序或方法 我可以编写一个 来找出重复的文件
  • 如何使 rush 与我的 orionInstance 一起工作

    按照我之前的问题如何在 MapViewer 小部件中显示来自 OrionContextBroker 的实体我使用 Rush 配置了我的上下文代理实例 并且正在使用https ngsiproxy lab fi ware org作为 NGSI
  • 如何使用java并发编程的ExecutorService?

    我使用下面的代码在远程服务器上上传图像 当我使用下面的代码时 它会同时在远程服务器上上传所有图像 List
  • 排序功能未按预期工作

    我有一个对象数组 实际上是从后端获取的 现在我正在映射数据 并希望通过单击按钮按升序和降序对其进行排序 所以我创建了一个 onSort 函数 但它不起作用我预计 因为大写和小写问题存在 即使按字母顺序排列 最后显示小写 数字没有排序 还有另