CodeGym /Java 课程 /Frontend SELF ZH /Iterables 和 Iterators

Iterables 和 Iterators

Frontend SELF ZH
第 45 级 , 课程 0
可用

1.1 基本概念

在 JavaScript 中,迭代器(iterators)和可迭代对象(iterables)是一些基本的概念,它们让对象可以被遍历。这些概念在现代 JavaScript 中被广泛使用,尤其是在类似 for...of 循环、spread operator(扩展运算符)、解构赋值等语法结构中。在这节课里,我们会看看什么是 iterables 和 iterators,它们是如何工作的以及如何创建和使用它们。

Iterables(可迭代对象)

可迭代对象是那些实现了迭代协议的对象。它们必须有一个带有键 [Symbol.iterator] 的特殊方法,该方法返回一个迭代器对象。

Iterators(迭代器)

迭代器是具有 next() 方法的对象,该方法返回一个带有两个属性的对象:

  • value —— 下一个元素的值
  • done —— 布尔值,表示序列是否结束(true)或未结束(false

让我们看一些使用的例子。

内置可迭代对象

JavaScript 有几个内置的可迭代对象,包括数组、字符串、SetMap 对象。

示例 1: 遍历数组

JavaScript
    
      const array = [1, 2, 3, 4, 5];

      for (const item of array) {
        console.log(item);
      }

      // 输出: 1 2 3 4 5
    
  

示例 2: 遍历字符串

JavaScript
    
      const string = 'hello';

      for (const char of string) {
        console.log(char);
      }

      // 输出: h e l l o
    
  

1.2 创建自己的迭代器

你可以通过实现迭代协议来创建自己的迭代器,即创建 next() 方法。

示例 1: 创建迭代器

JavaScript
    
      function createIterator(array) {
        let index = 0;

        return {
          next: function() {
            if (index < array.length) {
              return { value: array[index++], done: false };
            } else {
              return { done: true };
            }
          }
        };
      }

      const myIterator = createIterator([1, 2, 3]);

      console.log(myIterator.next()); // { value: 1, done: false }
      console.log(myIterator.next()); // { value: 2, done: false }
      console.log(myIterator.next()); // { value: 3, done: false }
      console.log(myIterator.next()); // { done: true }
    
  

创建可迭代对象

为了让对象成为可迭代的,它必须实现 [Symbol.iterator] 方法。对,这名字确实有点怪。看看怎么创建它。

示例 2: 创建可迭代对象

JavaScript
    
      const myIterable = {
        *[Symbol.iterator]() {
          yield 1;
          yield 2;
          yield 3;
        }
      };

      for (const value of myIterable) {
        console.log(value);
      }

      // 输出: 1 2 3
    
  

1.3 内置方法

我们来看看用于处理可迭代对象的内置方法和运算符。

示例 1: 扩展运算符

扩展运算符(...)可以用来拷贝或合并可迭代对象。

JavaScript
    
      const array = [1, 2, 3];
      const newArray = [...array, 4, 5, 6];

      console.log(newArray); // 输出: [1, 2, 3, 4, 5, 6]
    
  

示例 2: 解构赋值

解构赋值允许从可迭代对象中提取值。

JavaScript
    
      const [first, second, third] = [1, 2, 3];

      console.log(first);  // 输出: 1
      console.log(second); // 输出: 2
      console.log(third);  // 输出: 3
    
  

示例 3: 方法 Array.from 和 Array.of

Array.from() 方法允许从可迭代对象创建数组。

JavaScript
    
      const set = new Set([1, 2, 3, 4, 5]);
      const array = Array.from(set);

      console.log(array); // 输出: [1, 2, 3, 4, 5]
    
  
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION