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);