目录

JavaScript 可迭代对象

可迭代对象是可以迭代的对象for..of

从技术上讲,iterables 必须实现Symbol.iterator方法。

迭代字符串

您可以使用for..of循环遍历字符串的元素:

示例

for (const x of "91xjr") {
  // code block to be executed
}
亲自试一试 »

迭代数组

您可以使用for..of循环遍历数组的元素:

示例

for (const x of [1,2,3,4,5]) {
  // code block to be executed
}
亲自试一试 »

JavaScript 迭代器

这个迭代器协议定义了如何产生值序列来自一个物体。

一个物体变成了一个迭代器当它实现一个next()方法。

这个next()方法必须返回具有两个属性的对象:

  • 值(下一个值)
  • 完成(对或错)
迭代器返回的值
(如果done为true则可以省略)
完毕 真的如果迭代器已经完成
错误的如果迭代器产生了新值


自制可迭代

这个迭代返回永无止境:10,20,30,40,....每次 next()叫做:

示例

// Home Made Iterable
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return {value:n, done:false};
    }
  };
}

// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
亲自试一试 »

使其变得可迭代:

它不支持 JavaScriptfor..of陈述。

JavaScript 可迭代对象是一个具有符号迭代器

这个Symbol.iterator是一个可以返回next()函数的迭代器。

可以使用以下代码迭代可迭代对象:for (const x of iterable) { }

示例

// Create an Object
myNumbers = {};

// Make it Iterable
myNumbers[Symbol.iterator] = function() {
  let n = 0;
  done = false;
  return {
    next() {
      n += 10;
      if (n == 100) {done = true}
      return {value:n, done:done};
    }
  };
}

现在你可以使用for..of

for (const num of myNumbers) {
  // Any Code Here
}
亲自试一试 »

Symbol.iterator 方法被自动调用for..of

但我们也可以这样做"manually":

示例

let iterator = myNumbers[Symbol.iterator]();

while (true) {
  const result = iterator.next();
  if (result.done) break;
  // Any Code Here
}
亲自试一试 »