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

multidimensional array is being sorted as string rather than by value

本文关键字:排序 字符串 数组      更新时间:2023-09-26

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

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将整个元素视为字符串,而不仅仅是第一个元素。

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

这样的值

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

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

也就不需要使用reverse()了。

有关更多信息,请参阅sort()上的MDC文档

你希望JavaScript如何排序你的数组?来自文档:

语法

array.sort ([compareFunction])

参数

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

你需要告诉 JS如何排序数组,否则它会按照字典顺序排序(这几乎肯定不是你想要的)