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

时间:2012-08-18 18:52:53

标签: javascript arrays sorting

我正在实现SlickGrid,我希望允许按列对值进行排序,SlickGrid通过排序数组来支持这些值,但是,当我对列(数组)进行排序时,它们不会按“正确”顺序排列。< / p>

退回的顺序是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 ...

2 个答案:

答案 0 :(得分:3)

您的号码实际上是字符串,因此会进行比较。要防止这种情况发生,请使用parseInt(a[field],10) > parseInt(b[field],10)

答案 1 :(得分:2)

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

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

但是如果该字段是一个字符串后跟一个类似链接中的示例的数字,那么它将无法正常工作

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