iterator和generator

Iterator和Generator都是Python中用于处理迭代的高级语言特性。

includes 方法是 ECMAScript 2016 引入的一种新方法,用于检查一个数组是否包含某个值,并返回一个布尔值。如果数组中包含这个值则返回 true,否则返回 falseincludes 方法可以用在数组、字符串和 TypedArray 中。

const arr = [1, 2, 3, 4, 5];

console.log(arr.includes(3)); // 输出 true
console.log(arr.includes(6)); // 输出 false
 

 Iterator中有for....of方法可以用在数组、Set、Map中。

    //数组for····of
    let arr=[10,20,30]

        for(let v of arr){
            console.log(v);
        }


     //数组for····of
        let s=new Set();
        s.add(10).add(100).add(900);

        for(let v of s){
            console.log(v);
        }


      //Map使用for····of
        let m=new Map();
        m.set('k1',100)
        m.set('k3',200)
        m.set('k2',300)
        m.set('k4',400)

        for(let [k,v] of m){
            // console.log(v[0]);
            // console.log(v[1]);
            console.log(k,v);
        }

但是 在对象中for....of方法无法使用:

  let obj={
            id:110,
            name:"网三",
            age:2
        }

        for(let v of obj){
            console.log(v);//错误: Uncaught TypeError: obj is not iterable  at
        }

这就要了解一下iterator的执行原理:

function makeIterator(arr) {
            var nextIndex = 0;//标记索引
            return {
                next: function () {
                    return nextIndex < arr.length ?
                        { value: arr[nextIndex++], done: false } :
                        { value: undefined, done: true };
                }
            };
        }


        var it = makeIterator(['a', 'b']);

        it.next() // { value: "a", done: false }
        it.next() // { value: "b", done: false }
        it.next() // { value: undefined, done: true }

并不是iterator无法去使用对象而是需要创作者自我创建,设置后才能使用for....of进行遍历:

 function Person(no, name, age) {
            this.no = no;
            this.name = name;
            this.age = age;
        }

        //部署接口
        Person.prototype[Symbol.iterator] = function () {
            let keys = Object.keys(this);//所有属性的集合
            let nextIndex = 0;
            return {
                next: () => {
                    return nextIndex < keys.length ?
                        // { value: this[keys[nextIndex++]], done: false } :
                        { value: [keys[nextIndex], this[keys[nextIndex++]]], done: false } :
                        { value: undefined, done: true }
                }
            }
        }


        let p = new Person('10001', '光头强', 18);

        for (let v of p) {
            console.log(v);
        }

Generator方法是Python中的一种特殊函数,它可以通过yield关键字来实现可迭代对象的创建。与普通函数不同的是,Generator方法中包含yield语句,通过执行yield语句来产生一个值,并且保存当前执行状态,等待下一次调用时继续执行。

Generator方法非常适合处理大型数据集合,因为它可以在需要时按需生成数据,从而减少内存的使用。另外,由于Generator方法可以产生无限的结果序列,因此在处理无限序列时很有用。

  function * fn(){
        yield "hello"
        console.log(1111);
        yield "world"
        yield "hi"
    };


    let it=fn();
    // console.log(it);//遍历器对象
    let rst1=it.next();
    console.log(rst1);

    let rst2=it.next();
    console.log(rst2);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值