按 [field] 值对 javascript 数组进行排序会给出错误的顺序

Sorting javascript arrays by [field] values gives wrong order

本文关键字:排序 出错 错误 顺序 field 值对 数组 javascript      更新时间:2023-09-26

我正在实现SlickGrid,我想允许按列对值进行排序,SlickGrid通过对数组进行排序来支持这一点,但是,当我对列(数组)进行排序时,它们没有按"正确"的顺序排列。

它们的返回顺序是 1,10,100,11,199,2,20,200,3,30,30,300....

尝试按标题对此网格中的任务进行排序时,问题显示得非常清楚:http://mleibman.github.com/SlickGrid/examples/example-multi-column-sort.html

尽管我使用自己的排序规则,而不是示例中使用的排序规则:

data.sort(function(a, b){
          var result = 
              a[field] === b[field] ? 0 :
              a[field] > b[field] ? 1 : -1
          ; 
          return args.sortAsc ? result : -result;
      });

问题仍然存在。

我的问题只是如何对数组进行排序,以便标题(和其他数据)以正确的顺序显示:1,2,3,100,200,300...

您的数字实际上是字符串,将进行比较。为防止这种情况,请使用parseInt(a[field],10) > parseInt(b[field],10)

如果您只是尝试对相同类型的对象进行排序,那么没有问题...你的算法似乎是对的。

但似乎您的数字实际上可能是字符串,因此它们被排序为字符串。您可以将它们解析为数字..即parseInt() , parseFloat()等。

但是,如果该字段是一个字符串,后跟一个数字,如链接中的示例所示,那么它将不起作用

"data 20"将始终小于 "data 3" ,因此您可能希望提取数字,然后按字符串和数字排序。