1

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

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 这样做?

4

2 回答 2

7

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

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

您应该指定自己的排序器功能来解决此问题:

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

那时也没有必要使用reverse()

有关详细信息,请参阅有关sort().

于 2013-01-08T19:42:58.443 回答
1

您希望 JavaScript 如何对数组进行排序?从文档

句法

array.sort([比较函数])

参数

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

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

于 2013-01-08T19:43:12.557 回答