【问题标题】:Javascript Sort function is not consistentJavascript 排序功能不一致
【发布时间】:2022-11-30 19:09:11
【问题描述】:

我有一个客户列表(Image1-未排序)并在表格中显示此列表。 用户可以通过单击表格标题对该表格进行排序。

如果他们第一次单击客户名称(图 2),列表将按客户名称从 A-Z 排序 然后他们第二次单击客户名称(图 3),列表按客户名称从 Z-A 排序

问题是,当用户第三次单击客户名称时(图 4),我期待看到列表像第一次一样重新排序(图 2)。但事实并非如此。该列表按 A-Z 顺序排列,但顺序不同 正如您从我附上的图像中看到的那样,第二张图像和第三张图像的顺序不同。

if (this.orderByColSide)
   authList.sort((a, b) => a.customerCode.toLowerCase() > b.customerCode.toLowerCase() ? 1 : -1);
else
   authList.sort((a, b) => a.customerCode.toLowerCase() > b.customerCode.toLowerCase() ? -1 : 1);            

【问题讨论】:

  • 如果两件事相等,你不会处理会发生什么。
  • 当用户第三次单击客户名称时(图 4),我期待看到列表像第一次一样重新排序(图 2)。但事实并非如此。“无论你用什么来展示这张表,有没有这样的功能?它似乎在升序排序和降序排序之间切换。它甚至可以处理删除排序吗?它是如何工作的?没有太多可做的这篇文章 - 你正在展示一些将按升序或降序排序的排序。不知道什么正在使用 nor 如何删除排序(如果可能)。
  • 您好 VLAZ,谢谢您的回答,但正如您从图 2 和图 4 中看到的那样,它们并不相等。查看Deal Column,您可以看到Deal Coloumn的差异
  • 然后回到我的第一条评论——你没有处理平等问题。
  • “不处理平等”是什么意思?

标签: javascript


【解决方案1】:

对字符串使用 localeCompare

if (this.orderByColSide)
   authList.sort((a, b) => a.customerCode.toLowerCase().localCompare(b.customerCode.toLowerCase())
else
   authList.sort((a, b) => - a.customerCode.toLowerCase().localeCompare(b.customerCode.toLowerCase())

【讨论】:

    猜你喜欢
    • 2017-10-07
    • 2021-01-07
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多