在 JavaScript 中, 迭代器 表示一系列值。 它是一个具有 next() 返回具有两个属性的 POJO 的函数:

  • value:序列中的下一个值。
  • done:如果 为真 ,则表示序列已完成。

例如,下面的对象是一个表示偶数序列的迭代器。

let num = 0;

const iterator = {
  next: () => {
    num += 2;
    return { value: num, done: false };
  }
};

迭代器和可迭代对象

迭代器本身通常没有用。 相反,在 JavaScript 中,您通常使用可迭代对象。 可 迭代 对象是具有 Symbol.iterator 返回迭代器的函数。 你可以想到一个可迭代的 Symbol.iterator 作为迭代器的工厂函数。

const iterable = {
  [Symbol.iterator]: function factory() {
    let num = 0;

    const iterator = {
      next: () => {
        num += 2;
        return { value: num, done: false };
      }
    };

    return iterator;
  }
};

Iterables 可以很好地与多种 JavaScript 语言结构和内置函数配合使用。
例如,您可以使用 for/of 环形。

const oneThruTen = {
  [Symbol.iterator]: function() {
    let num = 0;
    return { next: () => ({ value: ++num, done: num > 10 }) }
  }
};

for (const num of oneThruTen) {
  num; // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
}

请注意 不能 使用 您 , for/of 循环,只有一个 可迭代。

将 Iterable 转换为数组

有两种方法可以将可迭代对象转换为数组。 首先,JavaScript 有一个内置的 Array.from() 函数 可以将可迭代对象转换为数组的

const oneThruTen = {
  [Symbol.iterator]: function() {
    let num = 0;
    return { next: () => ({ value: ++num, done: num > 10 }) }
  }
};

Array.from(oneThruTen); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

扩展运算符 可迭代对象。 您可以使用它将可迭代对象转换为数组,如下所示。

const oneThruTen = {
  [Symbol.iterator]: function() {
    let num = 0;
    return { next: () => ({ value: ++num, done: num > 10 }) }
  }
};

[...oneThruTen]; // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
© 版权声明
评论 抢沙发

请登录后发表评论