Ordenar um array com matrizes nele por string

Eu tenho uma matriz que contém várias matrizes e gostaria de ordenar as matrizes com base em uma determinada seqüência dentro dessas matrizes.

var myArray = [ [1, 'alfred', '...'], [23, 'berta', '...'], [2, 'zimmermann', '...'], [4, 'albert', '...'], ]; 

Como posso classificá-lo pelo nome para que albert venha primeiro e zimmermann venha por último?

Eu sei como eu faria se pudesse usar o inteiro para ordenar, mas a string me deixa sem noção.

Obrigado pela sua ajuda! 🙂

Isso pode ser feito passando uma function de suporte como um argumento para a chamada do método Array.sort .

Algo assim:

  function Comparator(a, b) { if (a[1] < b[1]) return -1; if (a[1] > b[1]) return 1; return 0; } var myArray = [ [1, 'alfred', '...'], [23, 'berta', '...'], [2, 'zimmermann', '...'], [4, 'albert', '...'], ]; myArray = myArray.sort(Comparator); console.log(myArray); 

Você ainda pode usar array.sort() com uma function personalizada. Dentro da function, simplesmente compare o elemento que você deseja usar como sua chave. Por exemplo, você poderia usar:

 myArray.sort(function(a, b) { return a[1] > b[1] ? 1 : -1; }); 

Há uma maneira mais fácil agora:

 myArray = myArray.sort(function(a, b) { return a[1].localeCompare(b[1]); }) 

É case insensitive também.

Fonte: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

Impressionante! A ordenação composta no primeiro elemento, segundo elemento e depois terceiro, todos ascendentes neste exemplo, seria

 myArray=myArray.sort(function(a,b){ retVal=0; if(a[0]!=b[0]) retVal=a[0]>b[0]?1:-1; else if(a[1]!=b[1]) retVal=a[1]>b[1]?1:-1; else if(a[2]!=b[2]) retVal=a[2]>b[2]?1:-1; return retVal }); 

(sorting múltipla em mais de uma coluna)

No ES6 pode-se fazer o relativamente enérgico:

 myArray.sort(([a], [b]) => a.localeCompare(b)) 

ou

 myArray.sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0) 

Os bits úteis / modernos são o operador => lambda e o [X] argumento [X] .