我有一个包含对数组的数组。看起来像这样:
[[Jack],[1]],
[[Larry],[0]],
[[Veronica],[0]],
[[Sam],[1]],
[[Bob],[0]],
[[David],[1]]
我需要排序,以便按字母顺序排序a-z,但任何值为1的人都是第一个
排序后,它应如下所示:
[[David],[1]]
[[Jack],[1]],
[[Sam],[1]],
[[Bob],[0]],
[[Larry],[0]],
[[Veronica],[0]],
我有这两种排序功能,但我需要将它们组合起来。把它们一个接一个地搞砸了。
q.sort(function(a, b){ //sort alphabetically
if(a[0].toLowerCase() < b[0].toLowerCase()){
return -1;
}else if(a[0].toLowerCase() > b[0].toLowerCase()){
return 1;
}else{
return 0;
}
});
q.sort(function(a, b){return b[1] - a[1]}); //sort value 1/0
答案 0 :(得分:3)
更优雅的解决方案:
q.sort(function (a, b) {
return b[1] - a[1] || a[0].localeCompare(b[0]);
});
说明:
b[1] - a[1]
:这是你第二个函数的表达式;如果它是0
(假的),则表达式的第二部分被评估; a[0].localeCompare(b[0])
:localeCompare()
的工作方式类似于您的第一个功能(另外它支持区域设置)。答案 1 :(得分:1)
这样的事情怎么样。
b.sort(function(a, b) {
if (a[1] == 1 && b[1] == 0) return -1;
if (a[1] == 0 && b[1] == 1) return 1;
if(a[0].toLowerCase() < b[0].toLowerCase()){
return -1;
}else if(a[0].toLowerCase() > b[0].toLowerCase()){
return 1;
}else{
return 0;
}});
答案 2 :(得分:0)
使用它:
b.sort(function(a, b) {
if (a[1] == 1 && b[1] == 1 || a[1] == 0 && b[1] == 0) {
if (a[0].toLowerCase() < b[0].toLowerCase()) {
return -1;
} else if (a[0].toLowerCase() > b[0].toLowerCase()) {
return 1;
}
} else if (a[1] == 1 && b[1] == 0 || a[1] == 0 && b[1] == 1) {
return a[1] - b[1];
}
});