多维数组按字符串而不是按值排序

时间:2013-01-08 19:40:11

标签: javascript sorting multidimensional-array

我试图通过第一列按降序对以下二维数组进行排序:

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做到这一点?

2 个答案:

答案 0 :(得分:7)

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

sort(),未指定任何排序函数,将在其查看的每个元素上调用toString()。在我知道的所有JavaScript引擎中调用与您类似的元素上的toString(),会给出"[0,\"string\"]"

等值

您应该指定自己的分拣机功能来解决此问题:

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

此时也无需使用reverse()

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

答案 1 :(得分:1)

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

  

<强>语法

     

的Array.sort([的compareFunction])

     

<强>参数

     

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

你需要告诉 JS如何对该数组进行排序,否则正如所承诺的那样它将按字典顺序排序(这几乎肯定不是你所追求的)