Ordina una matrice con array in essa contenuti per stringa

Ho una matrice che contiene diversi array e vorrei ordinare gli array basati su una determinata stringa all’interno di quegli array.

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

Come posso ordinare il nome in modo che albert venga prima e zimmermann arrivi per ultimo?

So come lo farei se potessi usare il numero intero per l’ordinamento, ma la stringa mi lascia senza tracce.

Grazie per il tuo aiuto! 🙂

Questo può essere ottenuto passando una funzione di supporto come argomento alla chiamata del metodo Array.sort .

Qualcosa come questo:

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

È ancora ansible utilizzare array.sort() con una funzione personalizzata. All’interno della funzione, è sufficiente confrontare l’elemento che si desidera utilizzare come chiave. Per esempio, puoi usare:

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

C’è un modo più semplice ora:

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

Anche il case è insensibile.

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

Eccezionale! L’ordinamento composto sul primo elemento, il secondo elemento e poi il terzo, tutto in ordine crescente in questo esempio, sarebbe

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

(ordinamento multiplo su più di una colonna)

In ES6 si potrebbe fare la relativamente concisa:

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

o

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

I bit utili / moderni sono l’operatore => lambda e l’argomento [X] destrutturante.