多维数组按字符串排序,而不是按值排序
multidimensional array is being sorted as string rather than by value
我正在尝试按第一列降序排序以下二维数组:
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如何排序数组,否则它会按照字典顺序排序(这几乎肯定不是你想要的)
相关文章:
- Javascript排序字符串或数字
- 根据另一个数组对数组进行排序,包括位置和字符串[ES6]
- 根据Javascript中的字符串值对数组的数组进行排序
- Sencha Ext JS排序标准以字符串而不是JSON的形式发送
- 可以用javascript对包含数字的字符串进行排序
- 如何对字母数字字符串值进行排序
- AngularJS/Javascript:使用运算符对字符串进行排序
- 按字母顺序、数字顺序和特殊字符对字符串数组进行排序
- 通过自定义字母javascript对字符串进行排序
- 如何对姓氏进行排序,格式化电话号码,并返回一个包含对象数组值的字符串
- Javascript数组排序速度受字符串长度的影响
- jQuery - 本地存储排序字符串化对象顺序
- 使用日期格式排序字符串数组
- 在javascript中按两个或多个子字符串排序字符串数组
- Javascript用优先级排序字符串数组
- 如何使用javascript排序字符串数字
- AngularJS将css在比较后改为自排序字符串
- Angularjs ng-repeat按数字顺序排序字符串数组
- 按升序和降序排序字符串日期数组
- 如何将关联数组转换为排序字符串数组