JavaScript二维数组按第二个元素数值排序失败问题求助
解决二维数组按第二个元素数值排序的问题
嗨,我来帮你捋捋问题出在哪~
你现在的思路是先交换子数组的两个元素再排序,但这里有个关键错误:当你调用items.sort(function(a, b){return a - b})时,a和b其实是整个子数组,不是单个数值。数组和数组做减法运算会得到NaN,这就导致排序函数根本没法正确比较,自然排序无效啦。
其实完全不用来回交换元素,直接在排序的比较函数里指定要比较的是子数组的第二个元素(也就是索引为1的位置)就可以了,这样代码更简洁也不容易出错。
修正后的代码示例
假设你的items是类似[[itemName, quantity], ...]这样的二维数组,正确的排序代码应该是:
function orderListItemQuantity() { // 直接在比较函数中访问子数组的第二个元素 items.sort(function(a, b) { // a[1]和b[1]就是你要排序的数值 return a[1] - b[1]; }); }
补充说明
- 如果想要降序排序,只需要把
return a[1] - b[1]改成return b[1] - a[1]就行。 - 如果你坚持想用交换元素的方式(其实没必要啦),那你得确保排序时取的是子数组里的数值,比如交换后用
return a[0] - b[0],但这样多了两步循环交换,完全是多余的操作。
内容的提问来源于stack exchange,提问作者Roger
相关产品推荐
相关产品推荐

