最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript數(shù)組的快速克隆(slice()函數(shù))和數(shù)組的排序、亂序和搜索(sort()函數(shù))

 更新時(shí)間:2006年12月29日 00:00:00   作者:  
JavaScript中對(duì)變量的操作都是通過引用方式,而對(duì)數(shù)組也一樣。
前兩天想要對(duì)一個(gè)數(shù)組進(jìn)行復(fù)制,一直苦于找不到辦法(遍歷的方法俺是絕對(duì)不采用的)

無意中拿起《JavaScript權(quán)威指南》翻了翻數(shù)組的操作函數(shù),發(fā)現(xiàn)了slice()函數(shù)。

slice()原來是用來截取數(shù)組中的一部分,這里我用它來復(fù)制數(shù)組,它的格式如下:
array.slice(start, end)
如果省略了end參數(shù),則切分的數(shù)組包含從start開始到數(shù)組結(jié)束的所有元素。 

現(xiàn)在要用它來復(fù)制數(shù)組,就一行,呵呵:
var newArray=oldArray.slice(0); 



所有這些功能,用一個(gè)sort()就可以完成了。

1. 排序:
默認(rèn)的sort()按字符編碼排序的:

現(xiàn)在要讓它按照數(shù)值大小排序:

只要傳遞一個(gè)比較函數(shù)給sort就可以了,如果比較函數(shù)的值小于0,則表示a必須出現(xiàn)在b前面,否則在b后面。
2. 亂序:
讓比較函數(shù)隨機(jī)傳回-1或1就可以了:

3. 搜索:
用sort()來玩搜索還蠻新鮮的,呵呵,看看是怎么玩的吧。
我現(xiàn)在要把數(shù)組里含有字母'a'的元素全部找出來,如果沒有sort(),似乎只能用遍歷了,遍歷的效率…那個(gè)叫恐怖?。?!具體做法如下:

這樣就把數(shù)組中含有字母'a'的元素全部放到數(shù)組前面啦,再經(jīng)過一些簡(jiǎn)單的處理,就可以輸出搜索結(jié)果了。
用slice來拷貝數(shù)組的確是一個(gè)很好的方法,而且實(shí)際上用得也會(huì)比較多,不過效率和遍歷相比很難說優(yōu)劣,因?yàn)槲覀冋l也不知道js的slice是怎么實(shí)現(xiàn)的,不過推測(cè)起來應(yīng)該要高效一些,更重要的是寫起來簡(jiǎn)單多了。

第二個(gè)排序的方法確實(shí)很巧妙,這樣就不用自己寫洗牌算法了 ^^

至于第三個(gè)嘛...如果不用正則,一定要用Sort的話,一樣是寫起來簡(jiǎn)單很多,不過效率可能不見得比遍歷高,要知道遍歷并不意味著效率低,線性表單向搜索的遍歷算法是O(N)復(fù)雜度的,Js的sort我猜用得是q-sort算法(如果用冒泡的話那就太寒酸了吧^^),所以起碼是O(N*LogN)復(fù)雜度的(排序比搜索復(fù)雜也很容易理解),也就是說執(zhí)行效率上用Sort匹配基本上肯定是要不如用直接的遍歷來得快的。
數(shù)組拷貝我習(xí)慣用concat。如: newArr = oldArr.concat(),效率和slice(0)一樣。

我測(cè)試過,slice或concat拷貝數(shù)組要比遍歷快得多。
測(cè)試過程中我還發(fā)現(xiàn)另外一個(gè)特點(diǎn),一個(gè)數(shù)組通過下標(biāo)取值時(shí),似乎也是通過類似遍歷的的方法取值的。比方說數(shù)組arr有100萬個(gè)數(shù)組元素,那么這兩個(gè)表達(dá)式:i = arr[0] 和  i = arr[999999] 相比,前者會(huì)更快的取到值?。ㄈ绻恍趴梢宰约喝ゾ巶€(gè)相關(guān)例子試試看)。也就是說當(dāng)遍歷數(shù)組時(shí),每次取值的所需時(shí)間會(huì)隨著下標(biāo)值的增加而增大。

相關(guān)文章

最新評(píng)論

桐柏县| 治县。| 嵊州市| 凌海市| 楚雄市| 林甸县| 徐闻县| 布拖县| 大埔区| 西城区| 临海市| 浦县| 黄龙县| 沈阳市| 高青县| 南乐县| 醴陵市| 井冈山市| 蓬溪县| 水城县| 桂林市| 临湘市| 阳信县| 安达市| 巨鹿县| 德令哈市| 金沙县| 慈利县| 乌兰察布市| 奉化市| 霍林郭勒市| 东阳市| 刚察县| 泰安市| 台安县| 云南省| 凌海市| 浦县| 五原县| 岐山县| 洪泽县|