Maison > interface Web > js tutoriel > le corps du texte

Explication détaillée de la façon dont JavaScript utilise la méthode sort() pour trier les tableaux multidimensionnels et les tableaux d'objets

伊谢尔伦
Libérer: 2017-07-25 15:28:15
original
3421 Les gens l'ont consulté

La méthode

sort() est utilisée pour trier les éléments d'un tableau. La syntaxe est la suivante :

arrayObject.sort(sortby)
Copier après la connexion

La valeur de retour est une référence au tableau. Veuillez noter que le tableau est trié sur le tableau d'origine, aucune copie n'est effectuée.

Si cette méthode est appelée sans paramètres, les éléments du tableau seront triés par ordre alphabétique, ou plus précisément, par ordre d'encodage des caractères. Pour y parvenir, les éléments du tableau doivent d'abord être convertis en chaînes (si nécessaire) à des fins de comparaison.

Si vous souhaitez trier selon d'autres critères, vous devez fournir une fonction de comparaison, qui compare deux valeurs et renvoie un nombre qui décrit l'ordre relatif des deux valeurs. La fonction de comparaison doit avoir deux paramètres a et b, et sa valeur de retour est la suivante :

Si a est inférieur à b, a doit apparaître avant b dans le tableau trié, puis renvoyer une valeur inférieure que 0.
Si a est égal à b, renvoie 0.
Si a est supérieur à b, renvoie une valeur supérieure à 0.


function NumAscSort(a,b)
{
 return a - b;
}
function NumDescSort(a,b)
{
 return b - a;
}
var arr = new Array( 3600, 5010, 10100, 801); 
arr.sort(NumDescSort);
alert(arr);
arr.sort(NumAscSort);
alert(arr);
Copier après la connexion

sort(fun) accepte une fonction de tri, qui comparera la taille de deux nombres. En fait, le principe de notre tri de tableaux d’objets est le même.
Si vous ne comparez pas les tailles des nombres, vous pouvez faire ceci :


var myarray=["Apple", "Banana", "Orange"]
myarray.sort()
Copier après la connexion

Après que le tableau appelle directement sort(), le tableau triera les les éléments du tableau par ordre alphabétique. Le tri, pour être plus précis, consiste à trier selon l'ordre de codage des caractères.
Pour le tri de tableaux d'objets, nous écrivons d'abord une fonction qui construit une fonction de comparaison :


//by函数接受一个成员名字符串做为参数
//并返回一个可以用来对包含该成员的对象数组进行排序的比较函数
var by = function(name){
 return function(o, p){
   var a, b;
   if (typeof o === "object" && typeof p === "object" && o && p) {
     a = o[name];
     b = p[name];
     if (a === b) {
       return 0;
     }
     if (typeof a === typeof b) {
       return a < b ? -1 : 1;
     }
     return typeof a < typeof b ? -1 : 1;
   }
   else {
     throw ("error");
   }
 }
}
Copier après la connexion

Le tableau à trier :


var employees=[]
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
Copier après la connexion

Appelez la fonction directement :


employees.sort(by("age"));
Copier après la connexion

À ce stade, le tri des tableaux d'objets est essentiellement implémenté . Alors, comment implémenter le tri de plusieurs valeurs clés ? Cela signifie que les âges sont triés en premier, et si les âges sont identiques, les noms sont comparés.
À ce stade, nous pouvons modifier davantage la fonction by afin qu'elle puisse accepter un deuxième paramètre. Lorsque la valeur de la clé principale génère une correspondance, une autre méthode de comparaison sera appelée pour déterminer le gagnant.


//by函数接受一个成员名字符串和一个可选的次要比较函数做为参数
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数
//当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下
var by = function(name,minor){
 return function(o,p){
   var a,b;
   if(o && p && typeof o === &#39;object&#39; && typeof p ===&#39;object&#39;){
     a = o[name];
     b = p[name];
     if(a === b){
       return typeof minor === &#39;function&#39; ? minor(o,p):0;
     }
     if(typeof a === typeof b){
       return a < b ? -1:1;
     }
     return typeof a < typeof b ? -1 : 1;
   }else{
     thro("error");
   }
 }
}

employees.sort(by(&#39;age&#39;,by(&#39;name&#39;)));
Copier après la connexion

D'accord, vous pouvez maintenant l'utiliser en toute confiance. Si vous ne le comprenez pas, vous pouvez directement copier la fonction by dans votre application et l'appeler directement.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!