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