我有以下功能:
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上都检查过。为什么会这样?
我是否需要将“ - ”替换为其他值。有没有办法,我可以不用更换。
答案 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
来测试给定的字符串并返回所需范围内的值。