ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript が sort() メソッドを使用して多次元配列とオブジェクト配列をソートする方法の詳細な説明

JavaScript が sort() メソッドを使用して多次元配列とオブジェクト配列をソートする方法の詳細な説明

伊谢尔伦
伊谢尔伦オリジナル
2017-07-25 15:28:153437ブラウズ

sort() メソッドは、配列の要素をソートするために使用されます。構文は次のとおりです。

arrayObject.sort(sortby)

戻り値は配列への参照です。配列は元の配列に基づいてソートされ、コピーは作成されないことに注意してください。

このメソッドがパラメータなしで呼び出された場合、配列内の要素はアルファベット順、より正確には文字エンコード順に並べ替えられます。これを実現するには、まず配列の要素を比較のために (必要に応じて) 文字列に変換する必要があります。

他の基準で並べ替えたい場合は、2 つの値を比較し、2 つの値の相対的な順序を示す数値を返す比較関数を提供する必要があります。比較関数には 2 つのパラメーター a と b が必要で、その戻り値は次のとおりです:

a が b より小さい場合、a はソートされた配列内で b の前に表示され、0 より小さい値を返します。
a が b に等しい場合、0 を返します。
a が b より大きい場合、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) は、2 つの数値の大きさを比較する並べ替え関数を受け入れます。実際、オブジェクト配列のソートの原理は同じです。
数値の大きさを比較しない場合は、次のようにすることができます:


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

配列が直接 sort() を呼び出した後、配列は配列内の要素をアルファベット順に並べ替えます。文字エンコーディング順にソートされます。
オブジェクト配列の並べ替えの場合、まず比較関数を構築する関数を作成します:


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

並べ替える配列:


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

関数を直接呼び出します:


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

ここでは、object基本的に配列のソートが実現されます。では、複数のキー値の並べ替えを実装するにはどうすればよいでしょうか?これは、年齢が最初にソートされ、年齢が同じ場合に名前が比較されることを意味します。
この時点で、メイン キーの値が一致する場合に、別の比較メソッドが呼び出されて勝者が決定されるように、by 関数をさらに変更できます。


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

さて、これで安心して使えますね。理解できない場合は、 by 関数をアプリケーションに直接コピーして、直接呼び出すことができます。

以上がJavaScript が sort() メソッドを使用して多次元配列とオブジェクト配列をソートする方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。