陣列排序

使用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"]



留言

熱門文章