【问题标题】:multidimensional array is being sorted as string rather than by value多维数组被排序为字符串而不是值
【发布时间】:2012-12-22 18:21:24
【问题描述】:

我正在尝试按第一列的降序对以下二维数组进行排序:

wordsAndCount = [[0,"string"],[4,"string"],[31,"string"],[1,"string"],[3,"string"]];
wordsAndCount.sort();
wordsAndCount.reverse();

由于某种原因,JavaScript 将第一列视为字符串而不是整数,返回以下输出:

[4,"string"],[31,"string"],[3,"string"],[1,"string"],[0,"string"]

当期望的输出应该是:

[31,"string"],[4,"string"],[3,"string"],[1,"string"],[0,"string"]

是什么导致 JS 这样做?

【问题讨论】:

    标签: javascript sorting multidimensional-array


    【解决方案1】:

    JavaScript 将整个元素视为一个字符串,而不仅仅是第一个元素。

    sort(),没有指定任何排序函数,将在它查看的每个元素上调用toString()。在我知道的所有 JavaScript 引擎中,在像你这样的元素上调用 toString() 会给出像 "[0,\"string\"]" 这样的值

    你应该指定你自己的排序函数来解决这个问题:

    wordsAndCount.sort(function (a, b) {
        return b[0] - a[0];
    });
    

    那时也不需要使用reverse()

    有关详细信息,请参阅MDC documentation on sort()

    【讨论】:

    • 您可能希望b[0]-a[0] 消除reverse 调用。
    • @Shmiddty:心算让我失望了。正准备做一个小提琴来检查我没有错;)。
    • 行得通!但是我认为你应该颠倒a[0] - b[0] 的顺序以获得降序顺序,对吧?
    • @WebDeskIL:你是对的,是的;已经修好了。可怕,我明天早上要参加数学考试,对吧? :P
    • 嘿。快速变化的互联网。
    【解决方案2】:

    您希望 JavaScript 如何对数组进行排序?来自the docs

    语法

    array.sort([compareFunction])

    参数

    compareFunction 指定定义排序顺序的函数。如果 省略,则数组根据每个元素的字符串转换按字典顺序(按字典顺序)排序。

    您需要告诉 JS 如何对该数组进行排序,否则按照承诺它会按字典顺序对其进行排序(这几乎肯定不是您想要的)

    【讨论】:

      猜你喜欢
      • 2011-12-19
      • 1970-01-01
      • 2020-06-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多