我正在尝试对其中带有字符串数组的数组进行排序。这类似于这个问题(Sort an array with arrays in it by string),但是我不确定如何实现。我的数组如下

var myArray = [
            ['blala', 'alfred', '...'],
            ['jfkdj', 'berta', '...'],
            ['vkvkv', 'zimmermann', '...'],
            ['cdefe', 'albert', '...'],
          ];

我试图通过名称或内部数组的第二个参数按字母顺序(不区分大小写)对其进行排序。之后,如果有两个元素具有相同的第二个参数,我想按第一个参数排序。我尝试使用以下内容,但未成功,并没有真正了解原因。任何人都可以建议:
function Comparator(a,b){
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
return 0;
}

var myArray = [
            ['blala', 'alfred', '...'],
            ['jfkdj', 'berta', '...'],
            ['vkvkv', 'zimmermann', '...'],
            ['cdefe', 'albert', '...'],
              ];

myArray = myArray.sort(Comparator);

要在第二个参数之后对第一个参数进行排序,我会这样做吗?
   function Comparator(a,b){
    if (a[1] < b[1]){
 if (a[2] < b[2]) return -1
 if (a[2] > b[2]) return 1;
}
return -1;
}
    if (a[1] > b[1]) return 1;{
    if (a[2] < b[2]) return -1
      if (a[2] > b[2]) return 1;
  }
return 1;
  }
return 0;
    }

    var myArray = [
                ['blala', 'alfred', '...'],
                ['jfkdj', 'berta', '...'],
                ['vkvkv', 'zimmermann', '...'],
                ['cdefe', 'albert', '...'],
                  ];

    myArray = myArray.sort(Comparator);

最佳答案

您可以编写以下代码:

function Comparator(a, b) {
    // you can use the `String.prototype.toLowerCase()` method
    // if the comparison should be case insensitive
    if (a[1] < b[1]) return -1;
    if (a[1] > b[1]) return 1;
    if (a[0] < b[0]) return -1;
    if (a[0] > b[0]) return 1;
    return 0;
}

上面的函数首先根据数组的第二个元素对元素进行排序。如果第二个元素相等,则根据第一个元素对它们进行排序;如果a[1] === b[1]a[0] === b[0],则返回0,而ab位置保持不变。

From MDN Array.prototype.sort documentation:

07-24 17:46
查看更多