JS详解-迭代器模式详解两种方法实现

news/2024/7/10 23:09:35 标签: 迭代器模式, 开发语言, 前端, es6, 面试, javascript

前言:

javascript">        // 迭代协议可以定制对象的迭代行为-分为两个协议:可迭代协议、迭代器协议
        // 可迭代协议:增加方法[Symbol,=.iterator](){}(属性名表达式)返回符合协议器的对象
        // 迭代器协议:有next方法的对象,next方法返回:
        // 已结束:{done:true}
        // 继续迭代:{done:false,value:'x'}
        // 可以使用Generator或自己实现对象,next

Generator法:

javascript">   <script>
        const obj = {
            // Symbol.iterator 内置常量
            //[属性名表达式](){}
            [Symbol.iterator](){
               // 手写
               const arr = [1,2,3,4,5]
                let index = 0
                return {
                    next(){
                        if(index < arr.length){
                            // 可以继续迭代
                            return {
                                done:false,
                                value:arr[index++]
                            }
                        }else{
                            return {
                                // 已结束
                                done:true
                            }
                        }
                    }
                }
            }
        }
        for(const iterator of obj){
            console.log('iterator',iterator)
        }
    </script>

手写使用next和对象:

javascript">   <script>
        const obj = {
            // Symbol.iterator 内置常量
            //[属性名表达式](){}
            [Symbol.iterator](){
                // 使用Generator
                function* gen(){
                    yield 1
                    yield 2
                    yield 3
                    yield 4
                    yield 5
                }
                return gen()
            }
        }
        for(const iterator of obj){
            console.log('iterator',iterator)
        }
    </script>


http://www.niftyadmin.cn/n/5472796.html

相关文章

图像识别在零售业的应用

图像识别技术在零售业的应用已经成为推动行业变革的重要力量。通过结合计算机视觉和深度学习算法&#xff0c;图像识别技术能够实现对商品的自动识别、顾客行为的分析以及库存管理的优化&#xff0c;从而提高零售业的运营效率和顾客体验。 商品识别与智能结账 图像识别技术可…

条件变量的使用(golang)

1、背景 最近在学习go的一个开源协程池&#xff0c;在源码中有用到锁、信号量&#xff0c;锁相对来说用的是比较多的&#xff0c;信号量相对用的较少&#xff0c;之前研究学习过c的std::condition_variable&#xff0c;其实和golang的大同小异&#xff0c;个人感觉c的略强…

python创建虚拟环境

进入anaconda base环境&#xff0c;打开cmd执行如下指令&#xff1a; conda activate base 在Anaconda/envs目录下打开cmd执行如下指令创建虚拟环境&#xff1a; python -m venv myenv 查看虚拟环境&#xff1a; conda info --envs 激活虚拟环境&#xff1a; conda activ…

java面试题HashMap

又是栓Q的一天 目录 前言 一、HashMap的实现原理 二、常见面试题HashMap和HashTable的区别 1.父类不同 2.线程安全 3.方法的不同 4.键值约束 5.冲突存储 三、HashMap扩容机制的原理 四、基本面试题 1.什么是java? 2.java的特点有哪些&#xff1f; 3.JVM、JDK、JRE是什么关系&a…

Redis性能管理及主从复制、哨兵的配置与部署

一、redis性能管理 1.1 查看Redis内存使用 1.2 内存碎片率 1.3 内存使用率 1.3.1 避免内存交换发生的方法 1.4 内回收key 1.4.1 配置文件中修改 maxmemory-policy 属性值 1.5 缓存穿透 1.5.1 原因 1.5.2 条件 1.5.3 解决方案 1.6 缓存击穿 1.6.1 原因 1.6.2 现象…

AcWing1402.星空之夜

【题目链接】1402. 星空之夜 - AcWing题库 夜空深处&#xff0c;闪亮的星星以星群的形式出现在人们眼中&#xff0c;形态万千。 一个星群是指一组非空的在水平&#xff0c;垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如…

DotNetBar的SlidePanel和metroTilePanel使用笔记

一、前言 界面组件DotNetBar2中的2个控件属性SlidePanel和metroTitlePanel的使用方法&#xff0c;网上相关资源较少&#xff0c;就一些属性的使用学习记录如下&#xff1a; SlideSideDevComponents.DotNetBar.Controls.eSlideSide.Top/Bottom/Right/Left 及 metroTilePanel和m…

国外服务器租用需要考虑哪些重要信息

国外服务器租用是指从国外的数据中心或服务提供商那里租用服务器资源&#xff0c;以便部署网站、应用程序或其他网络服务。那么国外服务器租用需要考虑哪些重要信息,rak小编为您整理发布。 以下是一些关于国外服务器租用的重要信息&#xff1a; 1. 选择服务商&#xff1a;有许多…