用string排列数组

我想sorting一个数组string中的数组。 这是类似于这个问题( sorting数组中的string数组 ),但我不知道如何实现。 我的数组如下

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

我想按字母顺序(不区分大小写)按内部数组的名称或第二个参数进行sorting。 之后,我想sorting的第一个参数,如果有两个相同的第二个参数的元素。 我尝试使用以下,但不成功,并没有真正得到原因。 任何人都可以build议:

 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); 

在第二个参数后面sorting第一个参数,我会这样做吗?

  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; } 

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

从MDN Array.prototype.sort文档 :

如果提供了compareFunction ,则数组元素将根据compare函数的返回值进行sorting。 如果ab是被比较的两个元素,那么:

  • 如果compareFunction(a, b)小于0 ,则将compareFunction(a, b)sortingab更低的索引,即首先出现。
  • 如果compareFunction(a, b)返回0 ,则相对于彼此保持ab不变,但相对于所有不同的元素进行sorting。 注意:ECMAscript标准并不能保证这种行为,因此并非所有浏览器(例如,至less可以追溯到2003年的Mozilla版本)都尊重这一点。
  • 如果compareFunction(a, b)大于0 ,则将compareFunction(a, b)sorting为比a更低的索引。 当给定一对特定的元素ab作为其两个参数时compareFunction(a, b)必须始终返回相同的值。 如果返回不一致的结果,那么sorting顺序是不确定的。