数组对象(其实就是一个json对象),比如var courseJson = [{chapter:'2',section:'3',name='part1'},
{chapter:'2',section:'1',name='part2'},{chapter:'1',section:'2',name='part3'}]
注意:直接写出来的是json字符串形式,JSON.parse(courseJson)转成真正的json再做处理。
代码实现:
只比较一个属性:
//对象数组比较
courseJson.sort(compare("section"));
console.log(courseJson);
function compare(prop) {
return function(obj1, obj2) {
var val1 = obj1[prop];
var val2 = obj2[prop];
if (val2 < val1) {
return 1;
} else if (val2 > val1) {
return -1;
} else {
return 0;
}
};
}
比较两个属性:
先比较第一个,第一个如果相等,然后比较第二个
courseJson.sort(compare("chapter", "section"));
console.log(courseJson);
function compare() {
var arg = arguments;
return function(obj1, obj2) {
var val1 = obj1[arg[0]];
var val2 = obj2[arg[0]];
//先比较对象第一个属性
if (val2 < val1) {
return 1;
} else if (val2 > val1) {
return -1;
} else { //相等的时候比较第二个
// return 0;
var value1 = obj1[arg[1]];
var value2 = obj2[arg[1]];
if (value2 < value1) {
return 1;
} else if (value2 > value1) {
return -1;
} else {
return 0;
}
}
};
}
比较多个属性:
不设定比较的参数数量的比较函数
function compare() {
var arg = arguments;
var len = arg.length;
console.log('len='+len);
var flag;
return function(obj1, obj2) {
for (var i = 0; i < len; i++) {
val1 = obj1[arg[i]];
val2 = obj2[arg[i]];
if (val2 < val1) {
flag = 1;
break;
} else if (val2 > val1) {
flag = -1;
break;
} else { //相等的时候比较第二个
flag = 0;
}
}
return flag;
};
}