background image

        if (typeof o === "object" && typeof p === "object" && o && p) {  
            a = o[name];  
            b = p[name];  
            if (a === b) {  
                return 0;  
            }  
            if (typeof a === typeof b) {  
                return a < b ? -1 : 1;  
            }  
            return typeof a < typeof b ? -1 : 1;  
        }  
        else {  
            throw ("error");  
        }  
    }  

要排序的数组:
var employees=[];  
employees[0]={name:"George", age:32, retiredate:"March 12, 2014"}  
employees[1]={name:"Edward", age:17, retiredate:"June 2, 2023"}  
employees[2]={name:"Christine", age:58, retiredate:"December 20, 2036"}  
employees[3]={name:"Sarah", age:62, retiredate:"April 30, 2020"}
直接调用函数:
employees.sort(by(“age”));
到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对

age 排序,如果 age 相同,再比较 name。

这时,我们可以进一步修改

by 函数,让其可以接受第二个参数,当主要的键值产生一

个匹配的时候,另一个

compare 方法将被调用以决出高下。

//by 函数接受一个成员名字符串和一个可选的次要比较函数做为参数 
//并返回一个可以用来包含该成员的对象数组进行排序的比较函数  
//当 o[age] 和 p[age] 相等时,次要比较函数被用来决出高下  
varby =function(name,minor){ 
   returnfunction(o,p){  
     vara,b;  
if(o && p && typeof o === 'object' && typeof p ==='object'){    

     a = o[name];    

     b = p[name];    

         if(a === b){    

              return typeof minor === 'function' ? minor(o,p):0;