比較関数によるソート

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);