Array.prototype.sort方法是對數組進行排序,此方法使用函數參數指定排序規則,下面是深入了解Array的sort方法及使用技巧,跟著錯新技術頻道小編帶你來了解一下吧!
我們先來看看sort?的簡單應用:
var?arr=[2,1,3,4];
alert(arr.sort())??//?[1,2,3,4]?從小到大排列
//現在由大到小排列??得到?[4,3,2,1]
alert(arr.sort(function(left,right){return?left>right?-1:1}))
//這里,sort方法通過參數函數的返回值?1或者-1來決定是順排還是倒排
還記得我以前和大家說過的?利用?Function.apply?方法來獲取數組中的最大元素的方法嗎?
文中用了兩種不同的方法來獲取數組中的最大值.
現在?sort也可以來秀一下了.
var?arr=[2,1,3,4];
var?minValue=arr.sort()[0];
var?maxValue=arr.sort()[arr.length-1]???//??arr.sort().pop()
?怎么樣,這也是一種另類實現方法吧,還不用寫循環遍歷.?
不過,我必須要指出的是,這種方法的效率是最低的,對于幾十個百來個元素的數組,你還是可以使用這種技巧.
但是,如果數組很大,用?sort()方法可以慢得讓你想抽煙
進一步討論?sort?對復雜數據結構的排序.
1.?對多維數組的排序
var?arr=[
?????????????[2,1,55,4],
?????????????[5,3,22,3],
?????????????[1,2,77,2],
?????????????[9,4,33,5],
??????????];?????????????????
alert("默認按第一列排/n"+arr.sort().join("/n"))??
alert("現在按第三列排/n"+arr.sort(function(left,right){return?left[2]>right[2]?1:-1}).join("/n"))??
alert("現在按第三列倒排/n"+arr.sort(function(left,right){return?left[2]>right[2]?-1:1}).join("/n"))??
2.對復雜數據結構的排序
Array.prototype.each=function(f){for(var?i=0;i<this.length;i++)?f(this[i],i,this)}
function?showName(item){alert(item.name)};?//打印名字
var?arr=[
?????????????{name:"bill",money:500},
?????????????{name:"go_rush",money:400},
?????????????{name:"dudu",money:9000}
??????????];?????????????????
//依次顯示?dudu,bill,go_rush?看來dudu是最有錢的,而我是最窮的
arr.sort(function(left,right){return?left.money>right.money?-1:1}).each(showName)?
?3.對表格的排序,這個話題我昨天和大家聊過了.??
參見:
http://www.cnblogs.com/ashun/archive/2006/11/30/appendChild_table_sort.html
?更復雜的表格排序(也是用Array的sort函數):?
http://community.csdn.net/expert/Topicview2.asp?id=5174915
?4.?Protype.js?中對?sort有一個構思非常巧妙的擴展,先看他的代碼
1???sortBy:?function(iterator)?{
2?????return?this.collect(function(value,?index)?{
3???????return?{value:?value,?criteria:?iterator(value,?index)};
4?????}).sort(function(left,?right)?{
5???????var?a?=?left.criteria,?b?=?right.criteria;
6???????return?a?<?b???-1?:?a?>?b???1?:?0;
7?????}).pluck('value');
8???},
?這個?sortBy?允許傳入一個函數,?并把數組的每一個元素作為參數執行該函數,最后對函數返回的結果排序.
下面我來分解他的這個函數.
collect方法實際就是?map方法.相當于
Array.prototype.map=function(f){
???????for(var?i=0;ret=[];i<this.length;i++)??ret[i]=f(this[i],i,this)
??????return?ret
}
?比如,現在?
arr=[2,1,4,3]
iterator=function(x){return?x*x}
1-3行代碼就得到了這樣一個數組?
[
???{value:2,criteria:4},
???{value:1,criteria:1},
???{value:4,criteria:16},
???{value:3,criteria:9}
]
4-6行代碼就對數組按?criteria:進行排序,由小到大.排完得到
[
???{value:1,criteria:1},
???{value:2,criteria:4},
???{value:3,criteria:9},
???{value:4,criteria:16}
]
第7行代碼最簡單了,取每個元素的value屬性,最終得到?[1,2,3,4]??實現對arr的sortBy(function...)排序
上面是錯新技術頻道小編的經驗之談,希望對你了解有所幫助,有任何問題都可以給小編留言,小編會在第一時間回復大家的問題。
新聞熱點
疑難解答
圖片精選