• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    js數組實現一個類似ruby的迭代器_javascript技巧

    來源:懂視網 責編:小采 時間:2020-11-27 20:45:07
    文檔

    js數組實現一個類似ruby的迭代器_javascript技巧

    js數組實現一個類似ruby的迭代器_javascript技巧: 分為如下幾節(jié): ·基本實現 ·在迭代中引用原來的對象,或者直接改變數組的值而不是返回一個新數組 ·向迭代傳入無限多的參數 ·基本實現 今天突然發(fā)現js的數組處理起來真是麻煩,代碼一些就是一大堆,相比起ruby的迭代器來真是遜色不少,主要是要寫的代碼太多了
    推薦度:
    導讀js數組實現一個類似ruby的迭代器_javascript技巧: 分為如下幾節(jié): ·基本實現 ·在迭代中引用原來的對象,或者直接改變數組的值而不是返回一個新數組 ·向迭代傳入無限多的參數 ·基本實現 今天突然發(fā)現js的數組處理起來真是麻煩,代碼一些就是一大堆,相比起ruby的迭代器來真是遜色不少,主要是要寫的代碼太多了

    分為如下幾節(jié):

    ·基本實現

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

    ·向迭代傳入無限多的參數

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

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


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

    首先我們定義一個數組:


    1:用法一:

    迭代使用每個數組元素:


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

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

    2:用法二:

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


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

    3:更多:

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

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

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


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


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


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


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

    先到此為止吧.

    ·向迭代傳入無限多的參數

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

    我們將主方法修改如下:


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


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

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

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    js數組實現一個類似ruby的迭代器_javascript技巧

    js數組實現一個類似ruby的迭代器_javascript技巧: 分為如下幾節(jié): ·基本實現 ·在迭代中引用原來的對象,或者直接改變數組的值而不是返回一個新數組 ·向迭代傳入無限多的參數 ·基本實現 今天突然發(fā)現js的數組處理起來真是麻煩,代碼一些就是一大堆,相比起ruby的迭代器來真是遜色不少,主要是要寫的代碼太多了
    推薦度:
    標簽: js javascript 數組
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品国产福利久久久| 精品无人区无码乱码大片国产| 国语自产精品视频在线区| 国产精品免费看久久久香蕉| 99久久人妻无码精品系列蜜桃| 日韩美女18网站久久精品| 99久久免费国产精品| 97久久国产亚洲精品超碰热| 中文字幕亚洲精品无码| 国产午夜亚洲精品理论片不卡 | 久久亚洲日韩精品一区二区三区 | 亚洲一区精品伊人久久伊人| 国产欧美在线观看精品一区二区| 国产精品久久久天天影视| 精品一区二区三区在线观看视频| 亚洲国产精品毛片av不卡在线| 国产精品区AV一区二区 | 国产高清在线精品二区一 | 热re99久久精品国99热| 自拍中文精品无码| 亚洲AⅤ永久无码精品AA| 久久国产热这里只有精品| 国产精品国产三级在线专区 | 久久精品中文騷妇女内射| 亚洲午夜福利精品久久 | 久久99精品久久久久久齐齐| 国产高清在线精品一本大道国产| 91精品国产91久久久久福利| 99久久国产热无码精品免费| 国产麻豆精品一区二区三区v视界 国产麻豆一精品一AV一免费 | 日韩精品专区AV无码| 亚洲AV无码精品无码麻豆| 无码人妻精品一区二区三区在线 | 亚洲午夜精品久久久久久浪潮| 亚洲av无码成人精品区在线播放 | 亚洲欧美精品AAAAAA片| 中文精品人人永久免费| 无码少妇精品一区二区免费动态| 青草国产精品久久久久久| 蜜国产精品jk白丝AV网站| 国语精品一区二区三区|