CodeGym /課程 /Frontend SELF TW /Iterables 和 Iterators

Iterables 和 Iterators

Frontend SELF TW
等級 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: spread 運算符

spread 運算符 (...) 可以用於複製或合併可迭代對象。

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]
    
  
1
任務
Frontend SELF TW, 等級 45, 課堂 0
上鎖
數字迭代器
數字迭代器
1
任務
Frontend SELF TW, 等級 45, 課堂 0
上鎖
斐波那契迭代器
斐波那契迭代器
留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION