//1.
//bySort函數接受一個首要比較字符串和一個可選的次要比較函數做為參數
//並返回一個可以用來包含該成員的對象數組進行排序的比較函數
//當o[firstName] 和 p[firstName] 相等時,次要比較函數被用來比較
var bySort = function(compareName,minor){
return function(o,p){
var a,b;
if(o && p && typeof o === 'object' && typeof p ==='object'){
//如果是empty,用""表示
if(o.hasOwnProperty(compareName)){
a = o[compareName];
}
else{
a = "";
}
if(p.hasOwnProperty(compareName)){
b = p[compareName];
}
else{
b = "";
}
if(a === b){
return typeof minor === 'function' ? minor(o,p):0;
}
if(typeof a === typeof b){
return a < b ? -1:1;
}
return typeof a < typeof b ? -1 : 1;
}
}
}
function sortExtensionsByName(extensions){
extensions.sort(bySort('firstName',bySort('lastName'),bySort('ext')));
}