一個對象數組,單個對象里某個屬性是數字,需要按這個屬性的數字大小升序排序。
如下代碼是一個對象數組按照age屬性排序的方法:
1 var str=[ 2 {name:"a",age:50}, 3 {name:"b",age:20}, 4 {name:"c",age:40}, 5 {name:"d",age:30}, 6 ]; 7 function compare(key){ 8 return function(value1,value2){ 9 var val1=value1.key; 10 var val2=value2.key; 11 return val1-val2; 12 } 13 } 14 str.sort(compare('age')); 15 console.log(str);
運行了上面代碼,發現打印出來的還是原來的對象數組,並沒有按照age屬性排序。這是為什么呢
網上查了資料發現,對屬性的訪問,obj["key"]
與obj.key都是可以的,不過,如果key值並不確定,而是一個變量的時候,則只能通過obj[key]
的方式訪問。
知道了這個知識點,我們再來實現一遍
1 var str=[ 2 {name:"a",age:50}, 3 {name:"b",age:20}, 4 {name:"c",age:40}, 5 {name:"d",age:30}, 6 ]; 7 function compare(key){ 8 return function(value1,value2){ 9 var val1=value1[key]; 10 var val2=value2[key]; 11 return val1-val2; 12 } 13 } 14 str.sort(compare('age')); 15 console.log(str);
運行結果