English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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メソッドが編集者が皆さんに提供した全ての内容です。皆さんに参考になれば幸いですし、呐喊教程を多くのサポートをお願いします。