比較関数によるソート
JavaScriptのsort()メソッドは、文字列のASCII値に基づいてソートが行われます。
独自のソートを行うためには、比較関数を作成します。
sort()メソッドから比較関数が呼び出されるようにするには、sort()メソッドの引数として比較関数の参照を渡します。
// 数値として昇順にソートする
function compareNumbersAsc(a, b) {
return a - b;
}
// 数値として降順にソートする
function compareNumbersDsc(a, b) {
return b - a;
}
myArray = new Array(5, 2, 4, 10);
// 文字列としてSORT --- ソート結果(10, 2, 4, 5)
myArray.sort();
//数値として昇順にSORT --- ソート結果(2, 4, 5, 10)
myArray.sort(compareNumbersAsc);
//数値として降順にSORT --- ソート結果(10, 5, 4, 2)
myArray.sort(compareNumbersDsc);
オブジェクト配列のソート
(1)年齢順
function coworker(name, age) {
this.name = name;
this.age = age;
}
function comareAge(a,b) {
return a.age - b.age;
}
var employeeDB = new Array();
employeeDB[employeeDB.length] = new coworker("Alice", 23);
employeeDB[employeeDB.length] = new coworker("Fred", 32);
employeeDB[employeeDB.length] = new coworker("Jean", 28);
employeeDB[employeeDB.length] = new coworker("Steve", 24);
employeeDB.sort(comareAge);
(2)日付順
function date(year, month, day) {
this.year = year;
this.month = month;
this.day = day;
}
function comareDate(a,b) {
var dateA = new Date(a.year, a.month, a.day);
var dateB = new Date(b.year, b.month, b.day);
return dateA - dateB;
}
var dateDB = new Array();
dateDB[dateDB.length] = new date(2006,4,8);
dateDB[dateDB.length] = new date(2007,4,8);
dateDB[dateDB.length] = new date(2006,10,8);
dateDB[dateDB.length] = new date(2005,4,8);
dateDB.sort(comareDate);
(3)大文字・小文字の区別なし
function user(name, age) {
this.name = name;
this.age = age;
}
function comareName(a, b) {
var nameA = a.name.toLowerCase();
var nameB = b.name.toLowerCase();
if (nameA < nameB) {return -1}
if (nameA > nameB) {return 1}
return 0;
}
var userDB = new Array();
userDB[userDB.length] = new user("yamada", 23);
userDB[userDB.length] = new user("TANAKA", 24);
userDB[userDB.length] = new user("Tamura", 25);
userDB[userDB.length] = new user("Yamamoto", 26);
userDB.sort(comareName);