我正在实现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 ...
答案 0 :(得分:3)
您的号码实际上是字符串,因此会进行比较。要防止这种情况发生,请使用parseInt(a[field],10) > parseInt(b[field],10)
答案 1 :(得分:2)
如果您只是尝试对相同类型的对象进行排序,那么没有问题...您的算法似乎是正确的。
但似乎您的数字实际上可能是字符串,因此它们按字符串排序。
你可以将它们解析成数字..即parseInt() , parseFloat()
等。
但是如果该字段是一个字符串后跟一个类似链接中的示例的数字,那么它将无法正常工作
"data 20"
将始终小于"data 3"
,因此您可能需要提取数字,然后按字符串和数字排序。