配列のソートを行えるsort()メソッドを使ってみます。
サンプルコード
まずはソートのルールを定義する関数を引数に設定しない場合です。
var months = ['March', 'Jan', 'Feb', 'Dec']; months.sort(); console.log(months); // ["Dec", "Feb", "Jan", "March"] var array1 = [1, 30, 4, 21, 100000]; array1.sort(); console.log(array1); // [1, 100000, 21, 30, 4]
値が文字列の場合は昇順でソートされ、数値の場合は文字列に変換された上でソートされます。
ソートのデモページ
次に引数にソートのルールを定義した場合です。
// 昇順にソート var array1 = [4, 2, 5, 1, 3]; array1.sort(function(a, b) { if (a < b) { return -1; } if (b > a) { return 1; } return 0; }); console.log(array1); // [1, 2, 3, 4, 5] // 昇順にソート2 var array2 = [4, 2, 5, 1, 3]; array2.sort(function(a, b) { return a - b; }); console.log(array2); // [1, 2, 3, 4, 5] // 降順にソート var array3 = [4, 2, 5, 1, 3]; array3.sort(function(a, b) { return b - a; }); console.log(array3); // [5, 4, 3, 2, 1]
関数でルールを定義する場合、引数2つを比較して「-1」「1」「0」のどれかを返すようにします。
単純に数値を昇順や降順でソートしたい場合、array2やarray3でやっているように2つの引数を減算するだけでソートできます。
ソートのデモページ2
連想配列の場合も値の1つを使ってソートができます。
var array1 = [ { name: 'Edward', value: 21 }, { name: 'Sharpe', value: 37 }, { name: 'And', value: 45 }, { name: 'The', value: -12 }, { name: 'Magnetic', value: 13 }, { name: 'Zeros', value: 37 } ]; // valueで昇順にソート array1.sort(function (a, b) { return a.value - b.value; }); console.log(array1); // 結果: // [ // {name: 'The', value: -12}, // {name: 'Magnetic', value: 13}, // {name: 'Edward', value: 21}, // {name: 'Sharpe', value: 37}, // {name: 'Zeros', value: 37}, // {name: 'And', value: 45} // ]; var array2 = [ { name: 'Edward', value: 21 }, { name: 'Sharpe', value: 37 }, { name: 'And', value: 45 }, { name: 'The', value: -12 }, { name: 'Magnetic', value: 13 }, { name: 'Zeros', value: 37 } ]; // nameで昇順にソート array2.sort(function(a, b) { var nameA = a.name.toUpperCase(); // 大文字と小文字を無視する var nameB = b.name.toUpperCase(); // 大文字と小文字を無視する if (nameA < nameB) { return -1; } if (nameA > nameB) { return 1; } return 0; }); console.log(array2); // 結果: // [ // {name: 'And', value: 45}, // {name: 'Edward', value: 21}, // {name: 'Magnetic', value: 13}, // {name: 'Sharpe', value: 37}, // {name: 'The', value: -12}, // {name: 'Zeros', value: 37} // ];
コメントが承認されるまで時間がかかります。