Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在主干中按字母数字对集合排序_Javascript_Backbone.js_Natural Sort - Fatal编程技术网

Javascript 在主干中按字母数字对集合排序

Javascript 在主干中按字母数字对集合排序,javascript,backbone.js,natural-sort,Javascript,Backbone.js,Natural Sort,我编写了一个比较器,根据“id”对集合进行排序,如下所示: comparator: function(coll) { return coll.get('id'); } 这对于输入“id-1,id-0,id-2,id-199”来说效果很好,可以排序为“id-0,id-1,id-2,id-199” comparator: function(coll) { return coll.get('id'); } 但是这里没有数字排序:“id-1,id-0,id-2,id-199,id-9

我编写了一个比较器,根据“id”对集合进行排序,如下所示:

comparator: function(coll) {
    return coll.get('id');
}
这对于输入“id-1,id-0,id-2,id-199”来说效果很好,可以排序为“id-0,id-1,id-2,id-199”

comparator: function(coll) {
    return coll.get('id');
}

但是这里没有数字排序:“id-1,id-0,id-2,id-199,id-99”作为“id-0,id-1,id-2,id-199,id-99”--id-99应该在id-199之前。

正如@suish所评论的,解决这个问题的方法是用空字符串替换所有非数字部分

comparator: function(coll) {
    return coll.get('id');
}
coll.get('id').replace(/[^0-9^\.]/g,"")|0 –

尝试
coll.get('id')。替换(“id-”,“)| 0
,这可以工作,但初始字符串“id-”不是常量。
coll.get('id')。替换(/[^0-9^.]/g,”)| 0
谢谢@suish-这很有效,你能解释一下“|0”部分吗?可能不需要它,
|0
是按位操作,没有任何作用。但是javascript按位运算在开始计算之前会转换为32位数字,因此它最终的含义与“parseInt”相同。(比parseInt快一点)请使用注释中的解决方案更新答案,并接受它以表明问题已解决。但是您说初始字符串“id-”不是常量,那么丢弃前缀如何正确排序呢?@muistooshort-因为我们使用了正则表达式:/[^0-9^.]/gSo排序时您不在乎前缀?@muistooshort-/[^0-9^.]/g用数字和/或字母覆盖字符串。