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

标签 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。为什么会这样??

我是否需要用其他值替换“-”。有什么办法可以不用更换就可以做到吗。

最佳答案

您在 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 ,它测试给定的字符串并返回所需范围内的值。

关于javascript - 为什么浏览器按以下方式排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41719684/

相关文章:

javascript - 来自不带元素的元素的内部文本

javascript - 如何同时使用两个不同的jquery版本。我的代码无法在两个不同的 jquery 版本中正常工作

javascript - Knockout.js 显示/隐藏 block 可见性模式

javascript - 根据字符串将数组排序为新数组

http - 浏览器在什么情况下会发送字节范围请求?

css - 如何确定浏览器实际使用哪种字体来呈现某些文本?

html - 如何从 HTML5 脚本/文件/页面调用 Lua 脚本

javascript - 文本字段附近的按钮不显示在选项卡面板内的表单中

python - 检查元组中的顺序

java - 如何在不使用 Collections.sort 等排序方法的情况下根据姓氏对 LinkedList 进行排序