js让for of也可以遍历对象

首先我们要明白一个概念,for of能遍历的元素,只要是元素上有迭代器这个属性就可以遍历
比如说 我们的数组
在这里插入图片描述
我们的对象上 就没有这个属性, 所以就不能进行 for of遍历循环, 如果想要我们的对象可以用for of循环,那么再对象上 加上这个 迭代器属性就行了

   // 这里 要用let 因为下面我们要给属性加上一个 迭代器
   let obj = {
    0: 1,
    1: 2,
    2: 3,
    length: 3    // 需要给对象上加上 length,因为我们用的是数组的迭代器
   };

   obj[Symbol.iterator] = Array.prototype[Symbol.iterator];
   for(let item of obj) {
    console.log(item, "item");
   }

通过迭代器的概念 我们就解决了 遍历对象乱序的问题了
在这里插入图片描述

同样 我们可以自己修改 数组里面的迭代器方法

let arr = [1, 2, 3, 4, 5];
arr[Symbol.iterator] = function () {
    // 这里的this 代表的是这个数组
    let self = this,
    index = 0;

    return {
        // 迭代器 必须是要有next方法, 拿到结构中的某个值
        // done: false 是迭代器还没有结束循环  done: true 是代表结束循环了
        next() {
            if(index > self.length -1 ) {
                return {
                    done: true,
                    value: undefined
                };
            } 
            // 这里 我们可以让index + 1
            index = index + 2;
            return {
                done: false,
                value: self[index]
            };
        }
    };
}

for(let item of arr) {
    console.log(item, "item");
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值