js sort根據陣列中物件的某個屬性值進行排序
阿新 • • 發佈:2022-05-16
sort⽅法接收⼀個函式作為引數,這⾥巢狀⼀層函式⽤來接收物件屬性名,其他部分程式碼與正常使⽤sort⽅法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {name:'yjj',age:8} ]; function compare(property){ return function(a,b){ var value1 = a[property]; var value2 = b[property]; return value1 - value2; } } console.log(arr.sort(compare('age'))) // or 直接寫是一樣的 arr.sort((a,b)=>{ return a.age - b.age // 從小到大排序 b.age - a.age 從大到小排序 }); console.log(arr.sort(compare('age')))
如何根據引數不同,來確定是升序排列,還是降序排序呢?
/**陣列根據陣列物件中的某個屬性值進⾏排序的⽅法 * 使⽤例⼦:newArray.sort(sortBy('number',false)) //表⽰根據number屬性降序排列;若第⼆個引數不傳遞,預設表⽰升序排序 * @param attr 排序的屬性如number屬性 * @param rev true表⽰升序排列,false降序排序 **/ sortBy: function(attr,rev){ //第⼆個引數沒有傳遞預設升序排列 if(rev == undefined){ rev = 1; }else{ rev = (rev) ? 1 : -1; } return function(a,b){ a = a[attr]; b = b[attr]; if(a < b){ return rev * -1; }if(a > b){ return rev * 1; } return 0; } }