0

我正在实现 SlickGrid 并且我希望允许按列对值进行排序,这由 SlickGrid 通过对数组进行排序来支持,但是,当我对列(数组)进行排序时,它们没有按“正确”的顺序排列。

它们返回的顺序是 1,10,100,11,199,2,20,200,3,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...

4

2 回答 2

3

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

于 2012-08-18T18:58:09.590 回答
2

如果您只是想对相同类型的对象进行排序,那么没有问题……您的算法似乎是正确的。

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

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

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

于 2012-08-18T19:04:05.300 回答