对数组排序可以使用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