首页 > 编程语言 > 详细

javascript自己实现一个迭代器

时间:2019-03-15 11:24:27      阅读:159      评论:0      收藏:0      [点我收藏+]

js中对象分为可迭代和不可迭代 如果是可迭代哪它就会有一个[Symbol.iterator] 函数

这个函数就是对象的迭代器函数,如用for of 如果遍历的对象没有这个迭代方法那么就会报错

for of 传入的是可迭代对象,但是如何吧一个不可迭代的对象变为可迭代的对象呢!

很简单就是自己写一个[Symbol.iterator] 函数。

代码如下:

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        let obj = {
            a:1,
            b:2
        }    

        obj[Symbol.iterator] = function () {
            //取到对象的每个key值返回一个数组
            let keys = Object.keys(obj);
            //取到key值的长度
            let len = keys.length;
            //定义循环变量
            let n = 0;
            //返回对象 每次迭代会自动调用对象里面的next方法
            return {
                next(){
                    if(n < len){
                        //返回值有value和done
                        //value能自定义
                        //done为true跳出循环
                        return{
                            value:{k:keys[n],v:obj[keys[n++]]},
                            done:false
                        }
                    }else{
                        return{
                            done:true
                        }
                    }
                }
            }
        }
        //循环 
        //for of 只能遍历可迭代对象
        //所以自己写了个迭代器 详情请查阅web迭代协议
        //返回的是个对象的key和value
        for(let {k,v} of obj){
            console.log(k,v);
        }
    </script>
</body>
</html>

注释很完整就不多讲了,

输出如下:

  技术分享图片

 

  希望能够帮助到你们!!

  

 

javascript自己实现一个迭代器

原文:https://www.cnblogs.com/y-y-y-y/p/10535800.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!