JS`sray.sort`在IE6中失败,因为它的比较值不是数字。怎么解决?

时间:2011-09-05 11:45:13

标签: 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) {
        return bStart.length - aStart.length;
    }
    else {
        return b.name - a.name; // error because these aren't numbers
    }

    return 0;
});

这适用于我尝试过的每个浏览器,除了IE6,它返回一个错误,指出它预期一个数字。

我尝试从本文中实现建议的修复,建议“不要在数组排序函数中重用参数变量。”:http://www.zachleat.com/web/array-sort包含以下内容:

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)

如果您想要比较字符串并希望返回-101,请使用localeCompare()

return a.name.localeCompare(b.name);