我正在尝试按第一列降序排序以下二维数组:
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如何排序数组,否则它会按照字典顺序排序(这几乎肯定不是你想要的)