关于迭代器

实现迭代器的数据类型

  1.  字符串
  2.  数组
  3.  映射(Map,Set)
  4.  集合
  5.  arguments 对象
  6.  NodeList 等 DOM 集合类型

检查是否实现迭代器

const a = 1; 
const c = {};

console.log(a[Symbol.iterator]);    //undefined
consolt.log(c[Symbol.iterator]);    //undefined

const str = 'abc';
const arr = ['a','b','c'];
const map = new Map().set('a',1).set('b',2).set('c',3);
const set = new Set().add('a',1).add('b',2).add('c',3);
const els = document.querySelectAll('div');

console.log(str[Symbol.iterator],str[Symbol.iterator]());    
// f values() { [native code] },StringIterator {}
...

迭代方法

  1. for-of
  2. 数组结构
  3. 扩展操作符    [...arr]
  4. Array.from  (arr)
  5. Set构造函数    let set = new Set(arr)
  6. Map沟道函数   let map = new Map(arr)

如果对象父类实现了迭代器方法,那这个对象也会有

class ChildrenArray extends Array{}
let ChildrenArr = new ChildrenArray('a','b','c');

for(let item of ChildrenArr){
    console.log(item);
}

// a
// b
// c

使用next()迭代

let arr = ['a','b','c'];
let iter = arr[Symbol.iterator]();

console.log(iter.next());    // {done:false,value:'a'}
console.log(iter.next());    // {done:false,value:'b'}
console.log(iter.next());    // {done:false,value:'c'}
console.log(iter.next());    // {done:true,value:'undefined'}

自定义迭代器

class MyIterator{
    constructor(value){
        this.value= value;
    }

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

let iter = new MyIterator(3);

for(let i of iter){ console.log(i)}
// 1
// 2
// 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值