成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Iterator、for..of,for...in和自定義遍歷器

pcChao / 2066人閱讀

摘要:,和自定義遍歷器依次打印注釋就是一個(gè)指針指針默認(rèn)在的位置沒(méi)有遍歷完的時(shí)候的值是遍歷完了就是意義提高具有遍歷接口數(shù)據(jù)的效率特點(diǎn)它用來(lái)訪問(wèn)具有遍歷接口數(shù)據(jù)有一個(gè)方法指針,普通數(shù)組遍歷輸出。

Iterator、for..of,for...in和自定義遍歷器

Iterator:

var arr = [1,2,3,4,5];
    var ite = arr[Symbol.iterator]();
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    //依次打?。篛bject {value: 1, done: false};
               Object {value: 2, done: false};
           Object {value: 3, done: false};
           Object {value: 4, done: false};
           Object {value: 5, done: false};
           Object {value: undefined, done: true}.
注釋:1.Iterator就是一個(gè)指針;
     2.指針默認(rèn)在-1的位置;
     3.沒(méi)有遍歷完的時(shí)候done的值是false,遍歷完了就是true;
     4.意義:提高具有遍歷接口數(shù)據(jù)的效率;
     5.特點(diǎn):它用來(lái)訪問(wèn)具有遍歷接口數(shù)據(jù),有一個(gè)next方法(指針).

for..of,for...in:

普通數(shù)組遍歷:

let arr = [1,2,3,4,5];
    for(let item of arr){
        console.log(item);
    }
    //輸出:1 2 3 4 5。

迭代器遍歷:

let iterator = arr[Symbol.iterator]();
    let result = iterator.next();
    while(!result.done){
        console.log(result.value);
        result=iterator.next();
    }
    //輸出 1 2 3 4 5。

數(shù)組 Set Map

var s = new Set([1,2,3]);
    console.log(s);//打?。篠et(3) {1, 2, 3};
    var itera = s[Symbol.iterator]();
    console.log(itera.next());//打?。篛bject {value: 1, done: false};
        
    var m = new Map([["age",21],["sex","男"]]);
    m.set("name","宋澤");
    console.log(m);//打?。篗ap(3) {"age" => 21, "sex" => "男", "name" => "宋澤"};
    var i = m[Symbol.iterator]();
    console.log(i.next());//打?。篛bject {value: Array(2), done: false};
                
    let obj = {x:1,y:2,z:3};
    let arr = ["a","b","c"];
    for(let key in obj){
        console.log(key);//打?。簒 y z;
        console.log(obj[key]);//打?。簒 1 y 1 z 1;
    }
    for(let key in arr){
        console.log(key);//打印:x y z;
        console.log(arr[key]);//打?。簒 1 y 1 z 1;
    }
注釋:1.遍歷對(duì)象用forin,遍歷數(shù)組,Map,Set,類數(shù)組用for of。
     2.for in可以遍歷對(duì)象,也可以遍歷數(shù)組.

自定義遍歷器:

var arr = [1,2,3,4,5];
    function Iterator(arr){
        let i = -1;  //遍歷器默認(rèn)指在-1的位置;
        function next(){  //返回一個(gè)方法;
            i++;  //當(dāng)next的時(shí)候,i向后移;
            let value;  //聲明一個(gè)空的變量;
            let done = flase; //done的默認(rèn)值是沒(méi)有遍歷完成;
            if(i == arr.length){  //如果i等于數(shù)組的長(zhǎng)度的時(shí)候,i就溢出了,所以value的值是undefined,done的值是true;
                value = undefined;
                done = true;
            }else{  //否則value的值就等于數(shù)組中的值;
                value=arr[i];
            }
            return {value:value,done:done}; //返回兩個(gè)值,一個(gè)值是value,另一個(gè)值是done;
        }
        return {next:next};  //返回next方法;
    }
            
    var ite = arr[Symbol.iterator]();
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    console.log(ite.next());
    依次打?。篛bject {value: 1, done: false};
         Object {value: 2, done: false};
         Object {value: 3, done: false};
         Object {value: 4, done: false};
         Object {value: 5, done: false};
         Object {value: undefined, done: true}.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/84104.html

相關(guān)文章

  • ECMAScript6(14):iterator 迭代

    摘要:由于中引入了許多數(shù)據(jù)結(jié)構(gòu)算上原有的包括等等數(shù)組需要一個(gè)東西來(lái)管理他們這就是遍歷器。數(shù)組默認(rèn)遍歷器遍歷值相當(dāng)于依次輸出依次輸出依次輸出依次輸出不難看出默認(rèn)得到值而只能得到索引。即遍歷器的本質(zhì)就是一個(gè)指針。 由于 ES6 中引入了許多數(shù)據(jù)結(jié)構(gòu), 算上原有的包括Object, Array, TypedArray, DataView, buffer, Map, WeakMap, Set, We...

    toddmark 評(píng)論0 收藏0
  • ES6語(yǔ)法之可迭代協(xié)議和迭代協(xié)議

    摘要:有兩個(gè)協(xié)議可迭代協(xié)議和迭代器協(xié)議。為了變成可迭代對(duì)象,一個(gè)對(duì)象必須實(shí)現(xiàn)或者它原型鏈的某個(gè)對(duì)象必須有一個(gè)名字是的屬性迭代器協(xié)議該迭代器協(xié)議定義了一種標(biāo)準(zhǔn)的方式來(lái)產(chǎn)生一個(gè)有限或無(wú)限序列的值。 ECMAScript 2015的幾個(gè)補(bǔ)充,并不是新的內(nèi)置或語(yǔ)法,而是協(xié)議。這些協(xié)議可以被任何遵循某些約定的對(duì)象來(lái)實(shí)現(xiàn)。有兩個(gè)協(xié)議:可迭代協(xié)議和迭代器協(xié)議。 可迭代協(xié)議 可迭代協(xié)議允許 JavaScri...

    sarva 評(píng)論0 收藏0
  • JavaScript 設(shè)計(jì)模式(五):迭代模式

    摘要:文章內(nèi)容分兩部分前半部分為迭代器模式概念后半部分為中迭代器上半部分開(kāi)始迭代器模式提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中的各個(gè)元素,而又不需要暴露該對(duì)象的內(nèi)部表示。下半部分開(kāi)始的迭代器迭代器等同于遍歷器。執(zhí)行該函數(shù),會(huì)返回一個(gè)遍歷器對(duì)象。 showImg(https://segmentfault.com/img/bVbuyaZ?w=800&h=600); 文章內(nèi)容分兩部分: 前半部分為 迭...

    zhou_you 評(píng)論0 收藏0
  • forEach到迭代

    摘要:本文從使用對(duì)數(shù)組進(jìn)行遍歷開(kāi)始說(shuō)起,粗略對(duì)比使用進(jìn)行遍歷的差異,并由此引入中可迭代對(duì)象迭代器的概念,并對(duì)其進(jìn)行粗略介紹。說(shuō)到這里,就繼續(xù)說(shuō)一下迭代器關(guān)閉的情況了。確實(shí),符合可迭代協(xié)議和迭代器協(xié)議的。 本文從使用 forEach 對(duì)數(shù)組進(jìn)行遍歷開(kāi)始說(shuō)起,粗略對(duì)比使用 forEach , for...in , for...of 進(jìn)行遍歷的差異,并由此引入 ES6 中 可迭代對(duì)象/迭代器 的概...

    rockswang 評(píng)論0 收藏0
  • [前端漫談_1] 從 for of 聊到 Generator

    摘要:數(shù)據(jù)的層級(jí)意味著迭代數(shù)據(jù)結(jié)構(gòu)并提取它的數(shù)據(jù)。對(duì)于技術(shù)人而言技是單兵作戰(zhàn)能力,術(shù)則是運(yùn)用能力的方法。在前端娛樂(lè)圈,我想成為一名出色的人民藝術(shù)家。 聊聊 for of 說(shuō)起 for of 相信每個(gè)寫過(guò) JavaScript 的人都用過(guò) for of ,平時(shí)我們用它做什么呢?大多數(shù)情況應(yīng)該就是遍歷數(shù)組了,當(dāng)然,更多時(shí)候,我們也會(huì)用 map() 或者 filer() 來(lái)遍歷一個(gè)數(shù)組。 但是就...

    miqt 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<