我试图通过第一列按降序对以下二维数组进行排序:
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做到这一点?
答案 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如何对该数组进行排序,否则正如所承诺的那样它将按字典顺序排序(这几乎肯定不是你所追求的)