JS中对象数组根据某属性sort排序

对数组进行排序,可以用sort()方法,按照数组中元素的首字母或者数字大小进行排序:

var arr = [2,5,13,7,4,9,1];

//默认排序按照字符编码排序
arr.sort();      
console.log(arr);   //[1, 13, 2, 4, 5, 7, 9]

//如果想对数组按照大小进行排序,则需传入参数(比较函数)
//升序排列
arr.sort((a,b)=>{
    return a-b;     //返回值结果大于0,两数交换顺序
})
console.log(arr);   //[1, 2, 4, 5, 7, 9, 13]

//降序排列
arr.sort((a,b)=>{
    return b-a;     //返回值结果大于0,两数交换顺序
})
console.log(arr);   //[13, 9, 7, 5, 4, 2, 1]

比较函数compare返回值特点:
返回值大于0,两数交换顺序;
返回值小于等于0,两数位置不变;
以上规则得出的排序结果是升序的,如果想要得到降序的结果,则在比较结果大于0时返回小于0的结果,比较结果小于0时返回大于0的结果即可。

对象数组如何根据某个属性sort排序?

var data = [  
    {name: "Bruce", age: 23, id: 16, score: 80},  
    {name: "Alice", age: 24, id: 12, score: 90},  
    {name: "David", age: 21, id: 11, score: 70},  
    {name: "Cindy", age: 22, id: 10, score: 100},  
];  

data.sort(compareUp("age"));  
data.sort(compareDown("age"));  

// 升序排序  
function compareUp(propertyName) { 
    if ((typeof data[0][propertyName]) != "number") { // 属性值为非数字  
        return function(object1, object2) {  
            var value1 = object1[propertyName];  
            var value2 = object2[propertyName];  
            return value1.localeCompare(value2);  
        }  
    }  
    else {  // 属性值为数字  
        return function(object1, object2) { 
            var value1 = object1[propertyName];  
            var value2 = object2[propertyName];  
            return value1 - value2;  
        }  
    }  
}  

// 降序排序  
function compareDown(propertyName) { 
    if ((typeof data[0][propertyName]) != "number") { // 属性值为非数字  
        return function(object1, object2) {  
            var value1 = object1[propertyName];  
            var value2 = object2[propertyName];  
            return value2.localeCompare(value1);  
        }  
    }  
    else {  // 属性值为数字  
        return function(object1, object2) { 
            var value1 = object1[propertyName];  
            var value2 = object2[propertyName];  
            return value2 - value1;  
        }  
    }  
}  

posted on 2017-12-25 21:08  Yoooshiki  阅读(1258)  评论(0编辑  收藏  举报

导航