如何按子数组中第一个元素对数组进行排序

17

我有一个由子数组组成的数组,希望按子数组中第一个元素的数字大小降序排序。例如,我希望对以下数组进行排序:

array = [[2,text],[5,text],[1,text]]

并将其排序

array = [[5,text],[2,text],[1,text]]

有没有简单易用的函数?谢谢!

3个回答

25
array = [[2,text],[5,text],[1,text]];
array.sort(function(a,b){return a[0] < b[0]})

我很高兴能够帮助您,先生。 - Hilmi
这个能通用设置吗,这样我就可以传递要排序的元素了吗? - jlbriggs
1
@jlbriggs,你可以使用闭包来实现这个功能,例如 function genericSort(index, arr) {array.sort(function(a,b){return a[index] < b[index]})} 然后你可以这样调用它 array = [[2,3],[5,1],[1,2]];genericSort(0, array); /*这将按第一个索引排序*/ genericSort(1, array); 这个将按第二个索引排序 希望这能帮到你。 - Hilmi
3
无法工作。正确答案在下面,用"-"代替"<"! - xem
2
@xem 取决于浏览器。火狐浏览器接受 true/false 和 +/-。间谍软件(Chrome 及其衍生品)和 Safari/Webkit 只接受 +/-. - SamGoody

14
array = [[2,text],[5,text],[1,text]];
array.sort(function(a,b){return a[0] - b[0]})

sort函数的工作原理
若该函数返回

  • 小于零,将a排在b之前
  • 大于零,将b排在a之前
  • 零,保持a和b相对位置不变

更多信息请参见


3
你可以将其缩写为 array.sort((a,b) => a[0] - b[0]) - SamGoody

0
array.sort(key=lambda x: x[0], reverse=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接