陣列排序
使用sort()對陣列做排序時, 它的機制是將元素預設成字串, 再進行相互比較,
這樣會造成如10比2小的情形, 解法是: 傳入自己寫的比較函數, 像這樣:
寫法1:
var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
console.log(numbers.sort(function(a,b){
return a-b;
})); // [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
寫法2:
var numbers = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];
function compare(a, b) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
// a must be equal to b
return 0;
}
console.log(numbers.sort(compare)); // [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
再舉一個例子, 想依年齡排序:
var friends = [
{name: 'John', age: 30},
{name: 'Ana', age: 20},
{name: 'Chris', age: 25}
];
function comparePerson(a, b){
if (a.age < b.age){
return -1
}
if (a.age > b.age){
return 1
}
return 0;
}
console.log(friends.sort(comparePerson)); // 會輸出Ana(20)、Chris(25)、John(30)
最後, 舉一個為帶有抑音符號的字元排序:
var names2 = ['Maève', 'Maeve'];
console.log(names2.sort(function(a, b){
return a.localeCompare(b);
})); // ["Maève", "Maeve"]
留言
張貼留言