Javascript:先按第二列desc对2D数组排序,然后按第一列asc排序
Javascript: sort 2D array at first by second column desc, then by first column asc
我有一个称为myarr的2D数组,它有十几行和两列。其内容如下:
myarr[0][0]='John'
myarr[0][1]=48
myarr[1][0]='Ann'
myarr[1][1]=36
myarr[2][0]='Sean'
myarr[2][1]=18
...
我想按第二列排序,先下降,然后按第一列上升,比如这个:
John 48
Ann 36
Bob 36
Carl 36
Sean 18
Dean 17 ..
通过使用JavaScript,我尝试了这样的东西:
myarr.sort(function(a, b){
a = a[1]+a[0];
b = b[1]+b[0];
return a == b ? 0 : (a > b ? 1 : -1)
})
但这种方式是按第2列asc(0-85)排序,然后按第1列asc排序(A-Z)。我哪里出错了?非常感谢。
Update/注意:这是一个非常适合您的情况的紧凑排序函数,它还支持非ASCII字符的字符串。我认为这是对我的答案的"改进",但代价是除了那些知道发生了什么的人之外,不太容易理解:
myarr.sort(
function(a,b) {
return b[1]-a[1] || a[0].localeCompare(b[0]);
}
);
最初建议的答案是:这段代码将接受你给出的数据(随机化),并根据你的需要产生排序的输出。
myarr = [
['Dean', 17],
['John', 48],
['Ann', 36],
['Sean', 18],
['Bob', 36],
['Carl', 36]
];
myarr.sort(
function(a,b) {
if (a[1] == b[1])
return a[0] < b[0] ? -1 : 1;
return a[1] < b[1] ? 1 : -1;
}
);
alert(myarr);
相关文章:
- 让文本输入幻灯片显示输入时的新文本输入?然后向后滑动
- Javascript运行php文件,然后下载文件
- 如何将屏幕分辨率乘以 80%,然后在代码中使用
- 弹出窗口出现,然后退出
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 将值输入到对象,然后该对象推送到数组
- 如何临时暂停浏览器渲染,然后恢复整个页面
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 滚动然后捕捉到顶部而不是取消捕捉
- AngularJS加载JSON数据,然后从中解析/加载HTML
- 有没有一个抽象层,这样我就可以集成一次,然后使用pusher、pubnub或faye
- Canvas+svg路径动画,在路径中的特定点暂停一段时间,然后继续
- 如果30秒未单击,请应用CSS一次,将其删除,然后重新迭代
- 点击相同的按钮打开模型,然后提交表单
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 将display属性更改为visible flicks,然后再次消失
- 什么是“;选择“;然后触发事件
- 等待300毫秒,然后使用jQuery向下滑动菜单
- 转到另一个页面,然后立即触发ScrollTo
- Javascript:先按第二列desc对2D数组排序,然后按第一列asc排序