国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

深入了解Array的sort方法及使用技巧

2024-05-06 15:45:20
字體:
來源:轉載
供稿:網友

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...)排序

上面是錯新技術頻道小編的經驗之談,希望對你了解有所幫助,有任何問題都可以給小編留言,小編會在第一時間回復大家的問題。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 克拉玛依市| 威海市| 潼南县| 扶沟县| 隆林| 大埔县| 安化县| 太湖县| 韶关市| 迭部县| 遂溪县| 资中县| 河北省| 象州县| 斗六市| 海伦市| 黎平县| 瑞丽市| 子洲县| 志丹县| 甘孜县| 西峡县| 新宁县| 高淳县| 贵德县| 桂平市| 五大连池市| 云南省| 江阴市| 长汀县| 彭阳县| 岳普湖县| 封丘县| 精河县| 吉木萨尔县| 柏乡县| 巴青县| 平和县| 威信县| 淮北市| 澜沧|