<!DOCTYPE html>
<html>
<head>
<title>javascript排序</title>
<meta charset="UTF-8">
</head>
<body>
<div id="person"></div>
<script type="text/javascript">
// //根据数字进行函数的排序
// function sortByNum(a,b){
// return a-b;
// }
// var as = [1,2,"11","33","12",190];
// //对于js而言,默认是按照字符串来实现排序的
// as.sort(sortByNum);
// alert(as);
//测试根据对象排序
function Person(name,age){
this.name = name;
this.age = age;
}
var p1 = new Person("c",23);
var p2 = new Person("a",53);
var p3 = new Person("b",15);
var ps = [p1,p2,p3];
ps.sort(sortByProperty("age"));
function show(){
var p = document.getElementById("person");
for(var i=0;i<ps.length;i++){
p.innerHTML+=ps[i].name+","+ps[i].age+"<br/>";
}
}
/**
* 使用以下方法来处理排序,带来的问题是需要每一个属性都设置一个函数,显然不灵活
* 但是如果通过函数的返回值调用就不一样
* @param obj1
* @param obj2
* @returns {number}
*/
function sortByProperty(propertyName){
var sortFun = function(obj1,obj2){
if(obj1[propertyName] > obj2[propertyName]){
return 1;
}else if(obj1[propertyName] == obj2[propertyName]){
return 0;
}else{
return -1;
}
}
return sortFun;
}
function sortByName(obj1,obj2){
if(obj1.name > obj2.name){
return 1;
}else if(obj1.name==obj2.name){
return 0;
}else{
return -1;
}
}
function sortByAge(obj1,obj2){
return obj1.age-obj2.age;
}
show();
</script>
</body>
</html>