亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

現(xiàn)在要用它來(lái)復(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()來(lái)玩搜索還蠻新鮮的,呵呵,看看是怎么玩的吧。
我現(xiàn)在要把數(shù)組里含有字母'a'的元素全部找出來(lái),如果沒(méi)有sort(),似乎只能用遍歷了,遍歷的效率…那個(gè)叫恐怖?。。【唧w做法如下:

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

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

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

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

相關(guān)文章

最新評(píng)論