Maison >interface Web >js tutoriel >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
La méthode
sort() est utilisée pour trier les éléments d'un tableau. La syntaxe est la suivante :
arrayObject.sort(sortby)
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);
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()
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"); } } }
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"}
Appelez la fonction directement :
employees.sort(by("age"));
À 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 === 'object' && typeof p ==='object'){ a = o[name]; b = p[name]; if(a === b){ return typeof minor === 'function' ? 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('age',by('name')));
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!