この記事の例では、JavaScript オブジェクト配列のソート方法を説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
JavaScript の配列ソート関数 sort メソッドは、デフォルトでは、ASCII 文字順序に従って昇順にソートします。
arrayobj.sort(sortfunction);
パラメータ:sortFunction
オプション。要素の順序を決定するために使用される関数の名前です。このパラメータを省略した場合、要素は ASCII 文字の昇順でソートされます。
sort メソッドは Array オブジェクトを適切に並べ替えます。実行中に新しい Array オブジェクトは作成されません。
sortfunction 引数に関数が指定されている場合、その関数は次の値のいずれかを返す必要があります:
渡された最初のパラメータが 2 番目のパラメータより小さい場合は負の値。
両方の引数が等しい場合はゼロ。
最初の引数が 2 番目の引数より大きい場合は正の値。
上記の方法は一次元のソートには非常に便利ですが、SQL ステートメントの ORDER BY のような複数のキー値のソートを行うにはどうすればよいでしょうか?
多次元配列のマルチキー値の並べ替えはより複雑にする必要がありますが、それを解決するためにループを使用する必要はありません。実際の解決策は同じです。
番号:
次の例は、SQL ステートメントの ORDER BY col5、col9、col7 のように、数値の多次元配列を列 5、列 9、列 3 の順に並べ替えます。数値の場合は、2 つの項目を直接減算し、その結果を戻り値として使用できます。
<script language=javascript> var myArray = new Array(); for(var i=0;i<10;i++ ){ myArray[i]=new Array(); myArray[i][0]=Math.floor(Math.random()*10); myArray[i][1]=Math.floor(Math.random()*10); myArray[i][2]=Math.floor(Math.random()*10); myArray[i][3]=Math.floor(Math.random()*10); myArray[i][4]=Math.floor(Math.random()*10); myArray[i][5]=Math.floor(Math.random()*10); myArray[i][6]=Math.floor(Math.random()*10); myArray[i][7]=Math.floor(Math.random()*10); myArray[i][8]=Math.floor(Math.random()*10); } myArray.sort( function(x, y) { if(x[4]!=y[4]){ return x[4]-y[4]; } else if(x[8]!=y[8]){ return x[8]-y[8]; } else if(x[6]!=y[6]){ return x[6]-y[6]; } else { return 1; } } ); for(var i=0;i<myArray.length;i++ )...{ document.write(myArray[i].join(",") + "<br/>"); } </script>
キャラクター:
文字の場合、sortFunction 内の項目は数値のように直接減算することができません。戻り値を満たすためには、str1.localeCompare(str2) メソッドを呼び出して比較する必要があります。以下は、多次元配列の列 1 と列 2 をソートする場合です。
function sortFunction(array) { return array.sort( function(x, y) ...{ return (x[0]==y[0])?(x[1].localeCompare(y[1])):(x[0].localeCompare(y[0])) }); }
つまり、arrayObject.sort(sortFunction) のソート関数は依然として非常に強力であり、最終的には SQL ステートメントの ORDER BY と同じ機能を実現できます。
この記事が JavaScript プログラミングのすべての人に役立つことを願っています。