その内:
1. JavaScript の sort() で比較関数が指定されていない場合、デフォルトでは文字エンコーディング順に昇順にソートされます。つまり、値を並べ替える場合、望む結果が得られない可能性があります。
2.JavaScript の reverse() は、配列内の要素の順序を逆にします。
上記の最初の点を見てください。arr=[1,6,3,7,9] という配列がある場合、arr.sort() を使用すると、配列の順序は 1,3、 6、7、9と希望通りの結果が得られました。
次の配列ソートを見てください: arr=[3,1,16,34,30]、arr.sort() を実行すると、必要な 1,3 が得られますか? 16 はどうでしょうか? 、30、34?
実行後の結果は、1、16、3、30、34 であることがわかりました。明らかに、結果は望んでいたものではありません。実際、sort メソッドは上記の値を文字列形式で並べ替えます。これは、配列 arr1=['3','1','16','34','30'] の並べ替え結果と一致します。
コードは次のとおりです:
var arr= [3,1,16,34,30];
var arr1=['3','1','16','34','30']; (arr.sort() ); // 1,16,3,30,34
alert(arr1.sort()) // 1,16,3,30,34
では、正しい結果を取得したい場合: 1、3、16、30、34 はどうすればよいでしょうか?
JavaScript のマニュアルを確認してください。マニュアルの説明は次のとおりです。
定義と使用法
sort() メソッドは、配列の要素をソートするために使用されます。
構文
arrayObject.sort(sortby) パラメータ 説明
sortby オプション。ソート順を指定します。関数である必要があります。
戻り値
配列への参照。配列は元の配列に基づいてソートされ、コピーは作成されないことに注意してください。
説明
このメソッドを呼び出すときにパラメーターが使用されない場合、配列内の要素はアルファベット順、より正確には文字エンコーディングの順にソートされます。これを実現するには、まず、比較のために配列要素を (必要に応じて) 文字列に変換します。
他の基準で並べ替える場合は、2 つの値を比較し、2 つの値の相対的な順序を示す数値を返す比較関数を提供する必要があります。比較関数には 2 つのパラメーター a と b が必要で、その戻り値は次のとおりです:
a が b より小さい場合、a はソートされた配列内で b より前に表示され、0 より小さい値を返します。
a が b に等しい場合、0 を返します。
a が b より大きい場合、0 より大きい値を返します。
=====================================
上記説明より数値で並べ替えたい場合は、比較関数を提供する必要があることがわかります。一般的な比較関数は次のとおりです。
function sortArr (m, n){
if(mreturn -1;//より小さい、return -1
else if(m>n)
return 1;//より大きい, return 1
else return 0;//Equal, return 0
}
簡略化すると、次の 2 つの形式で記述できます:
function sortArr(m,n){
return m-n; >}
関数sortArr(m,n){
return m>n?1 :(m}
次に arr.sort(sortArr) を実行し、必要な結果が得られることがわかります: 1,3,16,30,34。言い換えると、配列は整数値に従って昇順にソートされます。
この場合、配列を降順に並べ替えたい場合はどうすればよいでしょうか?という新たな疑問が生じます。
1 つのアイデアは、sortArr 関数の戻り値を変更することです。m
n の場合は負の値を返し、m=n の場合は 0 を返します。 。それでおしまい。
昇順と降順の 2 つの関数を作成できます。次に、さまざまなニーズに応じてさまざまな関数を呼び出すだけです。
さらに、上記の別の関数 reverse() を呼び出して、配列を昇順に並べ替える場合、配列は reverse() メソッドを呼び出して配列の順序を逆にすることもできます。 、配列を降順にソートして実装できるようにします。
コードは次のとおりです:
arr.sort (sortArr).reverse();
概要: この記事では主に Javascript での配列のソートを紹介します。デフォルトでは文字列によるソートが行われるため、次のようにソートを実現します。他の形式のルールの場合は、独自の比較関数を定義する必要があります。