为什么浏览器按以下方式排序

时间:2017-01-18 12:39:45

标签: javascript sorting browser

我有以下功能:

var sortString = function (a, b) {
            a = a.toLowerCase();
            b = b.toLowerCase();
            if (a < b) return 1;
            if (a > b) return -1;
            return 0;
        }

我有以下两个字符串:

x = ["B1C3N_EUR_DFAK_ALL_3M_ALL","B1C3N_EUR_BPP_BCO_3M"];

当我在这个数组上运行上面的函数时。我希望“B1C3N_EUR_BPP_BCO_3M”在索引0处,而浏览器以相反的顺序返回它。我在Chrome和IE上都检查过。为什么会这样?

我是否需要将“ - ”替换为其他值。有没有办法,我可以不用更换。

1 个答案:

答案 0 :(得分:2)

您在Array#sort的回调中为较小和较大的值返回了错误的值。

if (a < b) return 1;
//                ^  should be -1, because a is smaller than b

if (a > b) return -1;
//                ^^  should be 1, because a is greater than b

对于更简洁的样式,您可以使用String#localeCompare来测试给定的字符串并返回所需范围内的值。