根据某个对象属性对数组进行排序

对数组排序可以使用sort()方法,它的比较函数接收两个参数,即要比较的值。我们只需要定义一个函数,这个函数接收一个属性名,然后根据这个属性名来创建一个比较函数,这样就可以根据某个对象属性对数组进行排序了。

var data = [
    {
        name: "frank",
        age: 10
    },
    {
        name: "ciel",
        age: 20
    }
];

function compare(propertyName) {
    return function(obj1, obj2) {
        var value1 = obj1[propertyName];
        var value2 = obj2[propertyName];
        if (value1 < value2) {
            return -1;
        } else if (value1 > value2) {
            return 1;
        } else {
            return 0;
        }
    }
}

data.sort(compare("name"));
console.log(data[0].name); //ciel

data.sort(compare("age"));
console.log(data[0].name); //frank

上面的例子默认是按照升序类排列的,如果我们想换成降序排列,就需要修改比较方法的返回值。还有一种更灵活的方法,就是多加一个标识是升序还是降序的参数,如果不传这个参数,默认升序排列。

var data = [
    {
        name: "frank",
        age: 10
    },
    {
        name: "ciel",
        age: 20
    }
];

function compare(propertyName, isAscending) {
    if(isAscending === undefined) {
        isAscending = 1;
    } else {
        isAscending = isAscending ? 1 : -1;
    }

    return function(obj1, obj2) {
        var value1 = obj1[propertyName];
        var value2 = obj2[propertyName];
        if (value1 < value2) {
            return isAscending * -1;
        } else if (value1 > value2) {
            return isAscending * 1;
        } else {
            return 0;
        }
    }
}
data.sort(compare("name", false));
console.log(data[0].name); //frank

data.sort(compare("age", false));
console.log(data[0].name); //ciel

你可能感兴趣的:(根据某个对象属性对数组进行排序)