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

Yoa*_*osh 1 javascript sorting multidimensional-array

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

wordsAndCount = [[0,"string"],[4,"string"],[31,"string"],[1,"string"],[3,"string"]];
wordsAndCount.sort();
wordsAndCount.reverse();
Run Code Online (Sandbox Code Playgroud)

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

[4,"string"],[31,"string"],[3,"string"],[1,"string"],[0,"string"]
Run Code Online (Sandbox Code Playgroud)

当所需的输出应为:

[31,"string"],[4,"string"],[3,"string"],[1,"string"],[0,"string"]
Run Code Online (Sandbox Code Playgroud)

是什么导致JS做到这一点?

Mat*_*att 7

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

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

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

wordsAndCount.sort(function (a, b) {
    return b[0] - a[0];
});
Run Code Online (Sandbox Code Playgroud)

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

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