排序多维数组 - 数组(不是对象)

时间:2014-09-02 19:39:26

标签: javascript sorting functional-programming

我有一个包含对数组的数组。看起来像这样:

[[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

3 个答案:

答案 0 :(得分:3)

更优雅的解决方案:

q.sort(function (a, b) {
    return b[1] - a[1] || a[0].localeCompare(b[0]);
});

说明:

  1. b[1] - a[1]:这是你第二个函数的表达式;如果它是0(假的),则表达式的第二部分被评估;
  2. 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];
    }
});