• [译]Understanding ECMAScript6 迭代器与生成器(未完)


    迭代器在许多编程语言中被作为一种更易处理数据集合的方式被使用。在ECMAScript6中,JavaScript添加了迭代器,将其作为此语言的一个重要特征。当再加上新的方法和新的集合类型(比如集合与映射)时,迭代器对数据的高效处理变得更加重要。

    什么是迭代器

    迭代器不过是一个带有特定接口的对象。此接口由一个名为next()的返回一个结果对象的方法组成。该结果对象有两个属性,value,也就是next的值,还有done,一个布尔值,当没有更多的值要返回时就为true。迭代器保留了一个指向了值集合位置的内部指针,每次调用next(),返回下一个合适的值。

    如果你在最后一个值被返回后调用next(),该方法返回的done是true,value包含了迭代器的返回值。返回值并不认为是数据集的一部分,而是相关数据的最终片段,或者如果不存在这样的数据就是undefined(这一概念在本章后面的生成器一节中会更加清晰)。

    理解了这些,用ECMAScript5创建生成器就相当简单了,比如:

    function createIterator(items) {
    
        var i = 0;
    
        return {
            next: function() {
    
                var done = (i >= items.length);
                var value = !done ? items[i++] : undefined;
    
                return {
                    done: done,
                    value: value
                };
    
            }
        };
    }
    
    var iterator = createIterator([1, 2, 3]);
    
    console.log(iterator.next());           // "{ value: 1, done: false }"
    console.log(iterator.next());           // "{ value: 2, done: false }"
    console.log(iterator.next());           // "{ value: 3, done: false }"
    console.log(iterator.next());           // "{ value: undefined, done: true }"
    
    // for all further calls
    console.log(iterator.next());           // "{ value: undefined, done: true }"

    createIterator()函数在此例中返回了一个带有next()方法的对象。方法每次被调用时,items 数组中的下一个值会被作为value返回。当i为4时,items[i++]返回undefined且done为true,这满足了ECMAScript6中生成器特殊的最后一种情况。

    ECMAScript6在许多地方利用了生成器,使数据集合更易处理。因此,有一个好的基本理解有助于你更好的从整体上理解这门语言。

    生成器

    //to be continue

    生成器函数表达式

    //to be continue

    生成器对象方法

    //to be continue

    生成器类方法

    //to be continue

    可迭代对象和for-of

    //to be continue

    访问默认迭代器

    //to be continue

    创建可迭代对象

    //to be continue

    内置迭代器

    //to be continue

    集合迭代器

    //to be continue

    字符串迭代器

    //to be continue

    节点列表迭代器

    //to be continue

    高级功能

    //to be continue

    给迭代器传递参数

    //to be continue

    在迭代器中抛出错误

    //to be continue

    生成器返回语句

    //to be continue

    委托生成器

    //to be continue

    异步任务调度

    //to be continue

    总结

    //to be continue

  • 相关阅读:
    [JLOI2011]飞行路线 不同的算法,不同的悲伤
    洛谷 [USACO17OPEN]Bovine Genomics G奶牛基因组(金) ———— 1道骗人的二分+trie树(其实是差分算法)
    P3203 [HNOI2010]弹飞绵羊 —— 懒标记?分块?
    tarjan 题目汇总(含解析)
    P1262 间谍网络 (tarjan缩点 水过去)
    #1117. 编码 ( 字典树版 ) 题解分析
    一道并查集的(坑)题:关闭农场closing the farm
    四重解法---P1047 校门外的树
    一道搜索题【2013 noip提高组 DAY2 t3】华容道
    ●BZOJ 1499 [NOI2005]瑰丽华尔兹
  • 原文地址:https://www.cnblogs.com/qianlegeqian/p/4460808.html
Copyright © 2020-2023  润新知