【问题标题】:Sort a collection alphanumerically in backbone在主干中按字母数字对集合进行排序
【发布时间】:2015-11-10 02:35:52
【问题描述】:

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

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

这适用于输入:“id-1, id-0, id-2, id-199” 排序为“id-0, id-1, id-2, id-199”

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

【问题讨论】:

  • 试试coll.get('id').replace("id-","") | 0
  • 这可行,但初始字符串“id-”不是常量。
  • coll.get('id').replace(/[^0-9^\.]/g,"")|0
  • 谢谢@suish - 这行得通,你能解释一下“| 0”部分吗?
  • 它可能不需要,| 0 是按位运算,它什么都不做。但是 javascript 按位运算在开始计算之前会转换为 32 位数字,因此它的最终含义与“parseInt”相同。(比 parseInt 快一点)

标签: javascript backbone.js natural-sort


【解决方案1】:

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

coll.get('id').replace(/[^0-9^\.]/g,"")|0 –

【讨论】:

  • 请用来自 cmets 的解决方案更新答案并接受它以表明问题已解决。
  • 但是你说初始字符串“id-”不是恒定的那么如何将前缀扔掉正确排序呢?
  • @muistooshort - 因为我们使用了正则表达式:/[^0-9^\.]/g
  • 所以排序的时候不关心前缀?
  • @muistooshort - /[^0-9^\.]/g 用数字和/或字母覆盖字符串。
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 2019-04-21
  • 2011-01-15
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多