js數組排序,支持正反排序以及多維度排序
阿新 • • 發佈:2018-03-10
數字 ems key isn 默認 clas param sna items
工作中遇到js數組排序問題,數組中存儲的都是對象,於是就百度了下,利用別人的代碼進行修改,最終完成可以倒序、反序,可以進行多維度排序的功能
源碼如下:
/** * js數組排序 支持數字和字符串 * @param params * @param arrObj obj 必填 數組對象 * @param keyName string 必填 要排序的屬性名稱 * @param type int 選填 默認type:0 正順 type:1反順 */ function arrItemSort(arrObj,keyName,type) { //這裏如果 直接等於arrObj,相當於只是對對象的引用,改變排序會同時影響原有對象的排序,而通過arrObj.slice(0), //表示把對象復制給另一個對象,兩者間互不影響 var tempArrObj = arrObj.slice(0); var compare = function (keyName,type) { return function (obj1, obj2) { var val1 = obj1[keyName]; var val2 = obj2[keyName]; if (!isNaN(Number(val1)) && !isNaN(Number(val2))) { val1 = Number(val1); val2 = Number(val2); } //如果值為空的,放在最後 if (val1 == null && val2 == null) { return 0; } else if (val1 == null && val2!= null ) { return (type==1 ? -1 : 1); } else if (val2 == null && val1!= null ) { return (type==1 ? 1 : -1); } //排序 if (val1 < val2) { return (type==1 ? 1 : -1); } else if (val1 > val2) { return (type==1 ? -1 : 1);; } else { return 0; } } } return tempArrObj.sort(compare(keyName,type)); }
使用示例:
var temp = [ {"name":"zjf","score":50,"age":10}, {"name":"lyy","score":90,"age":5}, {"name":"zzx","score":90,"age":12} ]; //根據age排序 var temp1 = arrItemSort(temp,"age",1); console.log(temp1); //先按年齡排序,再按分數排序 var temp2 = arrItemSort(arrItemSort(temp,"age",1),"score",1); console.log(temp2);
來源:jsfun.cn
js數組排序,支持正反排序以及多維度排序