Heim  >  Artikel  >  Web-Frontend  >  Detaillierte Erläuterung, wie JavaScript die Methode sort() verwendet, um mehrdimensionale Arrays und Objektarrays zu sortieren

Detaillierte Erläuterung, wie JavaScript die Methode sort() verwendet, um mehrdimensionale Arrays und Objektarrays zu sortieren

伊谢尔伦
伊谢尔伦Original
2017-07-25 15:28:153378Durchsuche

Die Methode

sort() wird zum Sortieren der Elemente eines Arrays verwendet. Die Syntax lautet wie folgt:

arrayObject.sort(sortby)

Der Rückgabewert ist eine Referenz auf das Array. Bitte beachten Sie, dass das Array nach dem Original-Array sortiert wird und keine Kopie erstellt wird.

Wenn diese Methode ohne Parameter aufgerufen wird, werden die Elemente im Array alphabetisch oder genauer gesagt in der Reihenfolge der Zeichenkodierung sortiert. Um dies zu erreichen, konvertieren Sie zunächst die Array-Elemente zum Vergleich in Zeichenfolgen (falls erforderlich).

Wenn Sie nach anderen Kriterien sortieren möchten, müssen Sie eine Vergleichsfunktion bereitstellen, die zwei Werte vergleicht und eine Zahl zurückgibt, die die relative Reihenfolge der beiden Werte beschreibt. Die Vergleichsfunktion sollte zwei Parameter a und b haben und ihr Rückgabewert lautet wie folgt:

Wenn a kleiner als b ist, sollte a vor b im sortierten Array erscheinen und dann einen kleineren Wert zurückgeben als 0 .
Wenn a gleich b ist, wird 0 zurückgegeben.
Wenn a größer als b ist, wird ein Wert größer als 0 zurückgegeben.


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) akzeptiert eine Sortierfunktion, die die Größe zweier Zahlen vergleicht. Tatsächlich ist das Prinzip unserer Objektarray-Sortierung dasselbe.
Wenn Sie die Größen von Zahlen nicht vergleichen, können Sie Folgendes tun:


var myarray=["Apple", "Banana", "Orange"]
myarray.sort()

Nachdem das Array sort() direkt aufgerufen hat, sortiert das Array die Beim Sortieren handelt es sich genauer gesagt um das Sortieren nach der Reihenfolge der Zeichenkodierung.
Für die Sortierung von Objektarrays schreiben wir zunächst eine Funktion, die eine Vergleichsfunktion erstellt:


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

Das zu sortierende Array:


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"}

Rufen Sie die Funktion direkt auf:


employees.sort(by("age"));

An diesem Punkt ist die Objektarray-Sortierung grundsätzlich implementiert . Wie implementiert man also die Sortierung mehrerer Schlüsselwerte? Das bedeutet, dass zuerst die Altersgruppen sortiert werden und bei Gleichaltrigen die Namen verglichen werden.
Zu diesem Zeitpunkt können wir die by-Funktion weiter modifizieren, sodass sie einen zweiten Parameter akzeptieren kann. Wenn der Hauptschlüsselwert eine Übereinstimmung generiert, wird eine andere Vergleichsmethode aufgerufen, um den Gewinner zu ermitteln.


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

Okay, jetzt können Sie es mit Zuversicht verwenden. Wenn Sie es nicht verstehen, können Sie die by-Funktion direkt in Ihre Anwendung kopieren und direkt aufrufen.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung, wie JavaScript die Methode sort() verwendet, um mehrdimensionale Arrays und Objektarrays zu sortieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn