按 [field] 值对 javascript 数组进行排序会给出错误的顺序
Sorting javascript arrays by [field] values gives wrong order
我正在实现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"
,因此您可能希望提取数字,然后按字符串和数字排序。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 使用promise和mongoose对文档进行排序
- javascript中的数组出错
- 节点Js:How to catch a“;没有这样的文件或目录“;读取线模块出错
- Selectize.js:如何对整数值的选项进行排序
- Javascript排序的图像弹出窗口..可以't单独弹出
- 如何通过引用var Using DataTables来进行分页或排序
- 为什么HTML5拖放的目标是孩子?(可排序列表)
- AngularJs对所有页面中的所有记录进行排序
- 在Meteor项目中安装并包含npm模块后出错
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- 解析JSON并从中删除对象会出错
- 按从高到低对多个int变量进行排序
- jQuery UI可排序-多连接列表拖动
- AngularJS指令出错-无法读取属性'编译'的未定义
- Javascript排序字符串或数字
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- Angular $parse在过滤/排序以整数开头的哈希值时出错
- 使用本地存储的可排序列表函数出错
- 在 Angular js 中按 Id 降序对记录进行排序时出错,并带有 orderby 子句