美文网首页
迭代器和生成器

迭代器和生成器

作者: 小旎子_8327 | 来源:发表于2019-04-30 18:12 被阅读0次

迭代器

为什么需要迭代器

传统的多个循环嵌套需要追踪多个变量,代码复杂度大,迭代器的出现旨在消除这种复杂性并减少循环中的错误

迭代器是什么

迭代器是一种特殊对象,它具有一些专门为迭代过程设计的专有接口,所有的迭代器对象都有一个next()方法,每次调用都返回一个结果对象。
结果对象有两个属性:一个是value,表示下一个将要返回的值;另一个是done,它是一个布尔类型的值,当没有更多可返回数据时返回true。

创建一个迭代器
function createIterator(items){
      var i = 0;
      return {
           next: function(){
                 var done = (i >= items.length);
                 var value = !done ? items[i++] : undefined;
                  return {
                           value: done,
                           done: done
                  } 
          }
      }
}

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 }"
// 之后的所有调用
console.log(iterator.next()); // "{ value: undefined, done: true }"

生成器

生成器是一种返回迭代器的函数,通过function关键字后的星号(*)来表示,函数中会用到新的关键字yield。星号可以紧挨着function关键字,也可以在中间添加一个空格

// 生成器
function *createIterator() {
    yield 1;
    yield 2;
    yield 3;
}
// 生成器能像正规函数那样被调用,但会返回一个迭代器
let iterator = createIterator();
console.log(iterator.next().value); // 1
console.log(iterator.next().value); // 2
console.log(iterator.next().value); // 3

相关文章

网友评论

      本文标题:迭代器和生成器

      本文链接:https://www.haomeiwen.com/subject/zkavnqtx.html