美文网首页
Javascript 迭代器是什么

Javascript 迭代器是什么

作者: light_fish | 来源:发表于2021-03-22 10:31 被阅读0次

Javascript 迭代器是什么

JavaScript迭代器是在ES6中引入的,用于循环一系列值,通常是某种集合。根据定义,迭代器必须实现next() 函数,该函数以{value,done}的形式返回对象,其中 value 是迭代序列中的下一个值, done 是一个布尔值,用于确定序列是否已被使用.

A very simple iterator with practical use in a real-world project could be as follows:

// Javascript
class LinkedList {
  constructor(data) {
    this.data = data;
  }

  firstItem() {
    return this.data.find(i => i.head);
  }

  findById(id) {
    return this.data.find(i => i.id === id);
  }

  [Symbol.iterator]() {
    let item = {next: this.firstItem().id};
    return {
      next: () => {
        item = this.findById(item.next);
        if(item) {
          return {value: item.value, done: false};
        }
        return {value: undefined, done: true};
      }
    };
  }
}

const myList = new LinkedList([
  {id: 'a10', value: 'First', next: 'a13', head: true },
  {id: 'a11', value: 'Last', next: null, head: false },
  {id: 'a12', value: 'Third', next: 'a11', head: false },
  {id: 'a13', value: 'Second', next: 'a12', head: false }
]);

for(let item of myList) {
  console.log(item);    // 'First', 'Second', 'Third', 'Last'
}

在上面的示例中,我们实现了一个LinkedList数据结构,它在内部使用一个数据数组,其中每个项都有一个值,以及一些用于确定其在序列中位置的实现特定属性。从这个类构造的对象在默认情况下是不可iterable的,因此我们通过使用符号.迭代器并对其进行设置,使返回的序列根据类的内部实现按顺序排列,而返回的项仅返回其值。

迭代器

另一方面,迭代器只是函数,这意味着可以像调用任何其他函数一样调用它们(例如,将迭代委托给现有迭代器),同时也不限于符号.迭代器名称,允许我们为同一对象定义多个迭代器。下面是这些概念的一个例子:

class SpecialList {
  constructor(data) {
    this.data = data;
  }

  [Symbol.iterator]() {
    return this.data[Symbol.iterator]();
  }

  values() {
    return this.data
      .filter(i => i.complete)
      .map(i => i.value)
      [Symbol.iterator]();
  }
}

const myList = new SpecialList([
  {complete: true, value: 'Lorem ipsum'},
  {complete: true, value: 'dolor sit amet'},
  {complete: false},
  {complete: true, value: 'adipiscing elit'}
]);

for(let item of myList) {
  console.log(item);  // The exact data passed to the SpecialList constructor above
}

for(let item of myList.values()) {
  console.log(item);  // 'Lorem ipsum', 'dolor sit amet', 'adipiscing elit'
}

在本例中,我们使用数据对象的本机数组迭代器使specialist iterable,返回数据数组的精确值。同时,我们还定义了一个values方法,它本身就是一个迭代器,使用数组.prototype.filter()Array.prototype.map(),然后最终返回符号.迭代器对于结果,只允许对序列中的非空对象进行迭代,并且只返回每个对象的值。

相关文章

  • Javascript 迭代器是什么

    Javascript 迭代器是什么 JavaScript迭代器是在ES6中引入的,用于循环一系列值,通常是某种集合...

  • JavaScript设计模式五(迭代器模式)

    JavaScript设计模式五(迭代器模式) 迭代器模式的定义: 迭代器模式的意思就是提供一种方法能够顺序的访问聚...

  • ES6中的迭代器、生成器

    迭代器 /遍历器 Iterator 迭代器是什么迭代器Iterator是一个具有next方法的对象 (genera...

  • 好程序员分享JavaScript迭代器的含义

    好程序员分享JavaScript迭代器的含义:什么是迭代器 迭代器就是为实现对不同集合进行统一遍历操作的一种机制,...

  • 深入JavaScript Day22 - 迭代器、可迭代对象、i

    一、迭代器、可迭代对象 1、【重要】一句话概括什么是迭代器?迭代器模式的优点是什么? 【迭代器】是帮助我们对某个数...

  • JavaScript iterable(迭代器)

    iterable 遍历Array可以采用下标循环,遍历Map和Set就无法使用下标。为了统一集合类型,ES6标准引...

  • JavaScript迭代器模式

    迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。如今大部分语言已经内置...

  • 迭代器和生成器

    迭代器 什么是迭代协议?迭代器是什么?迭代器是访问集合内元素的一种方式,一般用来遍历数据迭代器和以下标的访问方式不...

  • 迭代器和生成器 (JavaScript)

    迭代器是一个对象,用于将容器对象作为列表遍历。在 JavaScript 中,迭代器对象不是一个独立的内置对象,而是...

  • es6-迭代器和生成器

    迭代器 一个迭代器对象 ,知道如何每次访问集合中的一项, 并跟踪该序列中的当前位置。在 JavaScript 中...

网友评论

      本文标题:Javascript 迭代器是什么

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