English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

配列Arrayのソートメソッドsort

JavaScriptのArrayオブジェクトには独自のソートメソッドsort()があり、配列内のデータアイテムをソートするが、時には期待通りのソート結果が得られないことがある、例えば

12, 1, 2, 21, 3]
arr.sort();
alert(arr); 1,12,2,21,3

なぜこんなことなのか?JavaScriptのソートはデフォルトでASCII文字コードに基づいてソートされ、つまり、数字もその文字列形式でソートされるためだ。

var strArr = ['a', '}}2', 'a2', '2a', 'b', '3'];
alert(strArr.sort());

この結果は何になりますか? 2,2a,3,a,a2,b


数字のASCIIコードは文字よりも小さいため、数字が前に、文字が後に配置されます。

上記の配列arrを数値で並べ替え続けたい場合はどうすれば良いですか?

比較関数は特定のアルゴリズムを持つ関数です。

if (value

function compare_fn(value1, value2) {
 < value1 else if (value2) {
 return -1;
 }1 > value2) {
 return 1;
 } else {
 return 0;
 }
}

sortに比較関数compare_fnを渡し、並べ替えを行い、その後出力します

arr.sort(compare_fn);
alert(arr);  以下を得ます 1, 2, 3, 12, 21

JavaScriptのArrayオブジェクトのsortメソッドの返値の定義は以下の通りです

負の値:渡された最初の引数が二番目の引数よりも小さい場合

ゼロ:二つの値が等しい場合

正の値:最初の引数が二番目の引数よりも大きい場合


上記の比較関数は以下のように簡略化できます

function compare_fn(value1, value2) {
 return value1 - value2;
}

この比較は昇順に並べ替えます


降順に並べ替えたい場合は、上記の返値のシンボルを直接変更すると良いです。すべての返値に反転させます。

簡略化された比較関数は以下の通りです

function compare_fn(value1, value2) {
 return -(value1 - value2);
}   

つまり

function compare_fn(value1, value2) {
 return value2 - value1;
}

簡単な記法では:昇順;降順。

以上の配列Arrayのソートsortメソッドが編集者が皆さんに提供した全ての内容です。皆さんに参考になれば幸いですし、呐喊教程を多くのサポートをお願いします。