您现在的位置是:首页 > 正文

JavaScript之迭代器Iterator

2024-02-01 05:53:32阅读 2
let arr1 = [1, 2, 3]
let iterator = arr1[Symbol.iterator]()
console.log(iterator.next()) // { value: 1, done: false }
console.log(iterator.next()) // { value: 2, done: false }
console.log(iterator.next()) // { value: 3, done: false }
console.log(iterator.next()) // { value: undefined, done: false }

// 迭代器实现 可以使用下面的Generator函数简化
function makeIterator (array) {
    let index = 0;
    return {
        next: function () {
            return index < array.length ?
                { value: array[index++], done: false } :
                { value: undefined, done: true };
        }
    };
}
let it = makeIterator([4, 5]);
console.log(it.next()) // { value: 4, done: false }
console.log(it.next()) // { value: 5, done: false }
console.log(it.next()) // { value: undefined, done: true }



// Generator 生成器 用于生成一个迭代器对象
function* makeIterator1 (arr) {
    let index = 0
    while (index < arr.length) {
        yield arr[index++]
    }
}
let it1 = makeIterator1([6, 7, 8])
console.log(it1.next()) // { value: 6, done: false }
console.log(it1.next()) // { value: 7, done: false }
console.log(it1.next()) // { value: 8, done: false }
console.log(it1.next()) // { value: undefined, done: true }

网站文章

  • char str1[]=&quot;abc&quot;; char str2[]=&quot;abc&quot;;str1与str2不相等,为什么

    两者不相等,是因为str1 和 str2 都是字符数组,每个都有其自己的存储区,它们的值则是各存储区的首地址。但有些情况却不一样, 程序如下: #include int main(void) { const char str3[] = &quot;abc&quot;; const char str4[] = &quot;abc&quot;; const char *st

    2024-02-01 05:53:25
  • win10计算机网络共享设置,win10电脑如何设置局域网共享?

    win10计算机网络共享设置,win10电脑如何设置局域网共享?

    win10电脑如何设置局域网共享??平时,大家在学校学习时,需要在课堂上使用到电脑,而有的时候就需要设置局域网共享来分发一些教学素材,或者是作业文档之类的东西,但是一些同学就是苦于不熟悉该如何去设置局...

    2024-02-01 05:52:58
  • mybatis中foreach的collection使用

    mybatis中foreach的collection使用

    2024-02-01 05:52:50
  • 选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GPT磁盘

    选中的磁盘具有MBR分区表,在EFI系统上,windows只能安装到GPT磁盘

    今天在给自己做系统选择驱动器C盘的时候,出现了这种下面的这种问题,“Windows无法安装在这个磁盘。选中的磁盘具有MBR分区表。在EFI系统上,windows只能安装在GPT磁盘。” 解决方法: 首...

    2024-02-01 05:52:43
  • Android中线程和线程池

    我们知道线程是CPU调度的最小单位。在Android中主线程是不能够做耗时操作的,子线程是不能够更新UI的。在Android中,除了Thread外,扮演线程的角色有很多,如AsyncTask,IntentService和HandlerThread等等。由于内容过多,所以将分为上下两部分,第一部分主要和大家谈谈Android中的线程,以及在Android中的常用的线程池。第二部分我们一起来...

    2024-02-01 05:52:36
  • Cmake一次编译多个cpp

    Module下有一个CMakeLists.txt 的文件 默认内容是这样的,(只贴了需要改动的部分)cmake_minimum_required(VERSION 3.4.1)# Creates and names a library, sets it as either STATIC# or SHARED, and provides the relative paths...

    2024-02-01 05:52:07
  • jvm原理(18)类加载器命名空间总结与扩展类加载器要点分析

    jvm原理(18)类加载器命名空间总结与扩展类加载器要点分析

    类加载双亲委托模型的好处: 1、可以确保Java核心库的类型安全:所有的Java应用都至少会引用Java.lang.Object类,也就是说在运行期,java.lang.Object这个类会被加载到J...

    2024-02-01 05:52:01
  • win系统下64位Julia链接fortran的方法

    win系统下64位Julia链接fortran的方法

    综合网络上各位大佬的方法,实现了在win系统下64位Julia链接fortran的方法。

    2024-02-01 05:51:55
  • 堆

    一.堆的定义堆是计算机科学中一类特殊的数据结构的统称,堆通常可以被看做是一棵完全二叉树的数组对象。二.API设计三.代码实现public class Heap<T extends Comparable...

    2024-02-01 05:51:26
  • 你的网卡真有千兆么?——千兆网卡传输速度解析 热门推荐

    随着PS3it技术的破解和可以利用电脑FTP向PS3传送文件,千兆网卡成为了不少玩家必备的工具。要知道PS3it技术本身自带千兆网卡,如果利用FTP软件以及电脑上的千兆网卡进行文件传输,其速度远比采用...

    2024-02-01 05:51:19