gpt4 book ai didi

javascript - 将 2 个模型与 1 个模型传递给 Backbone 比较器并进行字母数字排序

转载 作者:行者123 更新时间:2023-12-03 08:16:02 25 4
gpt4 key购买 nike

Backbone 新手,我正在尝试按字母数字方式对集合进行排序,并且使用像下面这样传入的一个模型来执行此操作效果很好:

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

这是我之前的问题和解决方案: Sort a collection alphanumerically in backbone

现在,如果我做类似进行区域设置比较的事情:

comparator: function(model1, model2) {
if ((model1.get('id').localeCompare(model2.get('id'))) < 0)
return -1;
}
if ((model1.get('id').localeCompare(model2.get('id'))) >0) {
return 1;
}
return 0;
}

这适用于输入:“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 之前。显然是因为没有纳入数值比较。我还没能成功实现这一点,有什么想法吗?

最佳答案

localeCompare 只是一一比较每个字符。因此它不会将数字部分识别为数字,而是将单个数字(例如 1,9,9)识别为单独的数字。所以你需要为数字部分编写自己的比较器。

尝试一下这个代码(我什至没有测试过代码,所以它可能有拼写错误或一些语法错误)

comparator: function(model1, model2) {
var m1num = model1.get("id").replace(/[^0-9^\.]/g,"")|0 || 0
var m1str = model1.get("id").replace(m1num,"")
var m2num = model2.get("id").replace(/[^0-9^\.]/g,"")|0 || 0
var m2str = model2.get("id").replace(m2num,"")
switch(true){
case m1str.localeCompare(m2str) < 0:
return -1;
case m1str.localeCompare(m2str) > 0:
return 1;
case m1str.localeCompare(m2str) == 0:
if(m1num < m2num) return 1
else if(m1num > m2num) return -1
else return 0
}
}

仅供引用,如果您的型号 ID 类似于“i8d-99”和“i7d-200”,上面的代码将无法正常工作。因为该函数最终会比较 899 和 7200。但除此之外,它应该按照您的预期工作

关于javascript - 将 2 个模型与 1 个模型传递给 Backbone 比较器并进行字母数字排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33932615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com