<!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>
时间: 2024-10-06 20:43:25