迭代器javascript

Posted wanluToPro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器javascript相关的知识,希望对你有一定的参考价值。

迭代器

let x = [1, 2, 3, 4];
const [a, b, c] = x;
console.log([a, b, c]); //[1,2,3]

迭代器

console.log(x[Symbol.iterator]); //[Function: values]

数组默认有实现迭代器

构造迭代器

let iterator = x[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
/**
 value: 1, done: false 
 value: 2, done: false 
 value: 3, done: false 
 value: 4, done: false 
 value: undefined, done: true 
 */

迭代器是从头向后迭代、如果迭代器使用时中间插入了新的元素只要在迭代器或之后则迭代器也会做出变化

类迭代器接口,方法实现

class Foo 
    [Symbol.iterator]() 
        return 
            next() 
                return 
                    done: false,
                    value: 'foo'
                
            
        
    

let f = new Foo();
console.log(f[Symbol.iterator]); //[Function: [Symbol.iterator]]

自定义迭代器

class Counter 
    constructor(limit) 
        this.count = 1;
        this.limit = limit;
    
    next() 
            if (this.count <= this.limit) 
                return 
                    done: false,
                    value: this.count++
                ;
             else 
                return 
                    done: true,
                    value: undefined
                ;
            
        
        [Symbol.iterator]() 
            return this;
        

let counter = new Counter(3);
for (let i of counter) 
    console.log(i); //1 2 3

可以利用闭包 返回多个迭代器

[Symbol.iterator]()
    let count=1,limit=this.limit;
    return 
    next()
    
    
    

提前终止迭代器 hook

当在使用for of 时可能会提前结束 使用 break
提前结束时 会自动调用 迭代器的return方法

class T 
    [Symbol.iterator]() 
        return 
            next() 
                return 
                    done: false
                ;
            ,
            return () 
                console.log("提前终止迭代器");
                return 
                    done: true
                ;
            
        
    

let t = new T();
for (let i of t) 
    break; //提前终止迭代器

以上是关于迭代器javascript的主要内容,如果未能解决你的问题,请参考以下文章

[JavaScript 刷题] 树 - 二叉搜索树迭代器, leetcode 173

[JavaScript 刷题] 树 - 二叉搜索树迭代器, leetcode 173

迭代器失效

迭代器javascript

JavaScript迭代器

JavaScript设计模式与开发实践 迭代器模式