?基本實現(xiàn)

?在迭代中引用原來的對象,或者直接改變數(shù)組的值而不是返回一個新數(shù)組

?向迭代傳入無限多的參數(shù)

?基本實現(xiàn) 今天突然發(fā)現(xiàn)js的數(shù)組處理起來真是麻煩,代碼一些就是一大堆,相比起ruby " /> 亚洲国产区中文在线观看,国产在线观看www鲁啊鲁免费,月夜直播免费看

天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

js 數(shù)組實現(xiàn)一個類似ruby的迭代器

分為如下幾節(jié):

?基本實現(xiàn)

?在迭代中引用原來的對象,或者直接改變數(shù)組的值而不是返回一個新數(shù)組

?向迭代傳入無限多的參數(shù)

?基本實現(xiàn)
今天突然發(fā)現(xiàn)js的數(shù)組處理起來真是麻煩,代碼一些就是一大堆,相比起ruby的迭代器來真是遜色不少,主要是要寫的代碼太多了,也許是js有特殊的處理數(shù)組的方式,真是我不知道而已,但是我真的想自己給js實現(xiàn)一個類似ruby的迭代器的東東,而且實現(xiàn)起來也不難,那就開始動手吧.

真的應該慶幸js是動態(tài)語言啊,如果是靜態(tài)語言,實現(xiàn)起來很不方便(別說要我重新定義一個繼承自array的類),不過用js實現(xiàn)起來就簡單多了,直接給Array對象加一個方法即可,如下:


額呵呵,迭代器其實已經(jīng)實現(xiàn)了......好簡單啊,是啊,不過這樣的確方便了不少哦,看下面的用法就知道了:

首先我們定義一個數(shù)組:


1:用法一:

迭代使用每個數(shù)組元素:


聲明:這里可以縮寫成:aa.each(function(val){alert(val)});,以下的也同理,為了清晰,分開寫的 

執(zhí)行結果是依次彈出每個數(shù)組元素的值,哦呵,就是這么簡單,不用寫可惡的for,如果代碼很多的時候,這點節(jié)省也會省出不少的代碼量哦

2:用法二:

迭代處理每個數(shù)組元素并返回一個處理后哦數(shù)組:


結果如何?如你所想,首先彈出的是"1,2,3,4",之后彈出的是"2,4,6,8",每個元素都被處理了,并且作為新數(shù)組返回,額呵呵,很簡單的功能,如果你覺得沒什么用的話,那好吧,還是去寫for循環(huán)吧,如果你喜歡這種寫法,那好吧,還有很多可以改進的地方,也留給大家去探索,反正這樣目前對我來說已經(jīng)足夠用來節(jié)省很多代碼了.

3:更多:

還可以給數(shù)組增加更多有用的方法,例如:隨機打亂順序(棋牌游戲?)等,不過真希望js可以在方法名中包含更多的標點符號,那樣就可以定義 each?或者each!這種警示性方法了,可惜可惜

?在迭代中引用原來的對象,或者直接改變數(shù)組的值而不是返回一個新數(shù)組

我這里有一個可以說是改進版的迭代器,因為我突然要在func函數(shù)里引用原來的迭代對象,于是做了如下修改


變化并不大,也兼容前面所講的所有功能,而且增加了對數(shù)組對象的引用


我們可以在func函數(shù)里引用原來的數(shù)組對象,和當前元素的索引位置,這樣可以增加很多功能哦,首先可以直接修改原來數(shù)組的值,!!!不過如果你在func函數(shù)里刪除了某個數(shù)組元素,可能會出現(xiàn)不可預料的錯誤哦!!!,下面來做個試驗,看看會出現(xiàn)什么結果:


哦,我們在func函數(shù)里刪除了值為2的元素,結果呢,依次彈出1,3,4,undefined,也就是迭代函數(shù)無法知道你的數(shù)組長度改變了,多循環(huán)了一次,如何解決這個問題呢?


初步想法是,判斷一下元素是否為空,如果為空,就不做任何操作,&&操作符的前面如果為假,就不會執(zhí)行后面的語句.今天發(fā)現(xiàn)這種方法有所欠考慮,因為我漏處理了一個元素,仔細想想就知道了,所以需要在處理函數(shù)里加一個offset變量,指引當前的偏移量,每次刪除元素就將offset變量減一,索引以index+offset為準,這樣可以解決刪除元素的問題,但是不能解決增加元素的問題,所以這個迭代器里不能動態(tài)增加數(shù)組元素,否則會出現(xiàn)錯誤,注意注意

先到此為止吧.

?向迭代傳入無限多的參數(shù)

又回來了,這次我們要讓這個迭代可以傳遞更多的有用的自定義參數(shù),而不是系統(tǒng)自定的,當然,前面的所有操作都是被兼容的,所有的修改都不會破壞前面的操作的兼容性.

我們將主方法修改如下:


OK,加了個參數(shù),只是一個參數(shù),沒有什么大驚小怪,但是它已經(jīng)可以完成所有的參數(shù)傳遞了,看例子:


還是剛才的例子,我們要刪除數(shù)組中的一個元素,我們通過傳遞進來的參數(shù)來確定刪除哪個值,我們用一個對象作為參數(shù)傳進來,這個對象是個json對象,歐耶,json可以承載任意多的參數(shù),想傳多少就傳多少,不是很簡單么,好像我們已經(jīng)實現(xiàn)了很多功能了.但是還沒有完,更多的需要自己去探索.

只用拓展ie的forEach就行了,ff下已經(jīng)支持了,而且你這種寫法貌似效率很低

JavaScript技術js 數(shù)組實現(xiàn)一個類似ruby的迭代器,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 亚洲熟妇AV乱码在线观看 | 99热这里只有精品8 99热这里只有精品6 | gogo免费在线观看 | 日本xxxxxxxxx老师59 | 日本人吃奶玩奶虐乳 | 午夜精品久久久久久影视riav | 亚州AV中文无码乱人伦在线 | 成人毛片18岁女人毛片免费看 | 人妻洗澡被强公日日澡 | 欧美日韩国产码在线 | 色噜噜噜亚洲男人的天堂 | 久久久久国产精品嫩草影院 | 给我免费播放片bd国语 | gogogo免费视频观看 | 99re.05久久热最新地址 | 99精品国产免费久久久久久下载 | 色综合久久88色综合天天提莫 | 麻豆高清免费国产一区 | 色综合欧美色综合七久久 | 酒色.com| 同桌别揉我奶了嗯啊 | 青青青草国产 | 午夜国产在线观看 | 国产高清视频免费最新在线 | 国产自啪偷啪视频在线 | 天天色天天综合网 | 果冻传媒在线播放 | 大桥未久电影在线 | 中文乱码35页在线观看 | 久草草在线视视频 | 欧美一区二区三区免费播放 | 在线免费观看毛片 | 日本湿姝在线观看 | 日本精品久久久久中文字幕2 | 午夜国产高清精品一区免费 | 又长又大又粗又硬3p免费视频 | 东京热一本无码av | 9277在线观看免费高清完整版 | 国产国拍亚洲精品av麻豆 | 精品一区二区三区在线成人 | 亚洲免费无码中文在线亚洲在 |