Trier un tableau avec des tableaux par chaîne

J'ai un tableau qui contient plusieurs tableaux et j'aimerais commander les tableaux en fonction d'une certaine chaîne dans ces tableaux.

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

Comment puis-je le trier par le nom afin que Albert arrive en premier et zimmermann arrive en dernier?

Je sais comment je le ferais si je pouvais utiliser l'entier pour le tri, mais la chaîne me laisse sans idée.

Merci pour votre aide! 🙂

Cela peut être obtenu en passant une fonction de support comme argument à l' Array.sort méthode Array.sort .

Quelque chose comme ça:

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

Vous pouvez toujours utiliser array.sort() avec une fonction personnalisée. À l'intérieur de la fonction, il suffit de comparer l'élément que vous souhaitez utiliser comme clé. Pour votre exemple, vous pouvez utiliser:

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

Il y a un moyen plus simple maintenant:

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

Il est également insensible à la casse.

Source: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare

Impressionnant! Le type de composé sur le premier élément, le deuxième élément et le troisième, tous croissant dans cet exemple, serait

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

(Multiple sur plus d'une colonne)

Dans ES6, on pourrait faire le même problème:

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

ou

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

Les bits utiles / modernes étant l'opérateur => lambda et la déstructuration des arguments [X] .