Javascript JS`array.sort`在IE6中失败,因为其比较的值不是数字。如何解决?
我有下面的排序函数,它尝试根据条目是否以输入文本框的值开头对条目进行排序Javascript JS`array.sort`在IE6中失败,因为其比较的值不是数字。如何解决?,javascript,internet-explorer,sorting,internet-explorer-6,Javascript,Internet Explorer,Sorting,Internet Explorer 6,我有下面的排序函数,它尝试根据条目是否以输入文本框的值开头对条目进行排序 items.sort(function(a, b) { var aStart = a.name.match(new RegExp('^' + textEntered, 'i')) || []; var bStart = b.name.match(new RegExp('^' + textEntered, 'i')) || []; if (aStart.length != bStart.length
items.sort(function(a, b) {
var aStart = a.name.match(new RegExp('^' + textEntered, 'i')) || [];
var bStart = b.name.match(new RegExp('^' + textEntered, 'i')) || [];
if (aStart.length != bStart.length) {
return bStart.length - aStart.length;
}
else {
return b.name - a.name; // error because these aren't numbers
}
return 0;
});
这适用于我尝试过的所有浏览器,IE6除外,它返回一个错误,表示它需要一个数字
我尝试实现本文中建议的修复,该修复建议“不要在数组排序函数中重用参数变量。”:如下所示:
items.sort(function(a1, b1) {
var a, b;
a = a1;
b = b1;
var aStart = a.name.match(new RegExp('^' + textEntered, 'i')) || [];
var bStart = b.name.match(new RegExp('^' + textEntered, 'i')) || [];
if (aStart.length != bStart.length) {
return bStart.length - aStart.length;
}
else {
return b.name - a.name;
}
return 0;
});
但它没有任何效果。以前有人处理过这个问题吗?此问题的最佳解决方案是什么?如果希望比较字符串并希望返回
-1
、0
或1
,请使用
如果要比较字符串并希望返回
-1
、0
或1
,请使用
反复执行
newregexp('^'+textcentered,'i')
对性能来说是可怕的。在排序和引用变量之前先计算它。谢谢@epascarello。我已将RedExp对象移到sort
调用范围之外。考虑到它是IE6,这是相当重要的!反复执行newregexp('^'+textcentered,'i')
对性能来说是可怕的。在排序和引用变量之前先计算它。谢谢@epascarello。我已将RedExp对象移到sort
调用范围之外。考虑到它是IE6,这是相当重要的!谢谢,这就成功了。不过我编辑了答案,因为它实际上是localeCompare()
,而不是localCompare()
,谢谢,这就成功了。我编辑了答案,因为它实际上是localeCompare()
,而不是localCompare()
return a.name.localeCompare(b.name);