【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
力扣的js入门免费题刷完了,开始自己找题练练,顺便捡捡知识点
力扣2649
1.思路
一眼递归,但事实证明也可以直接flat手撕。
arr.flat(Infinity) //直接扁平化到最底层
涉及到了一些关于生成器和异步编程相关的知识点,学一下。
2.关于生成器函数
在JavaScript中,星号(*
)用于定义生成器函数(generator function)。生成器函数是一种特殊类型的函数,它允许你在函数执行过程中暂停和恢复,同时保持函数的状态。
以下是关于生成器函数和星号的一些关键点:
- 生成器函数定义:
使用星号定义生成器函数,例如:
function* generatorFunction() {// ...
}
- 生成器函数执行:
调用生成器函数并不会立即执行其内部的代码,而是返回一个生成器对象(generator object)。生成器对象实现了迭代器协议,因此可以使用next()
方法来逐步执行生成器函数内部的代码。 yield
关键字:
在生成器函数内部,yield
关键字用于暂停函数执行,并返回一个值。后续调用生成器对象的next()
方法会恢复函数执行,直到下一个yield
表达式。yield*
表达式:
yield*
用于委托给另一个生成器函数或可迭代对象。在你提供的inorderTraversal
函数中,yield*
用于递归地遍历数组,并逐个产出元素。
以下是对你提供的inorderTraversal
函数的解释:
var inorderTraversal = function* (arr) {for (const item of arr) {if (Array.isArray(item)) {// 如果当前项是一个数组,递归地委托给inorderTraversal生成器// 并产出递归遍历的结果yield* inorderTraversal(item);} else {// 如果当前项不是数组,直接产出该项yield item;}}
};
在这个函数中,当遇到一个数组项时,它使用yield*
来委托给inorderTraversal
自身,从而实现对嵌套数组的深度优先遍历。对于非数组项,它使用yield
来产出该项。最终结果是,调用这个生成器函数可以逐个产出所有非数组元素,无论它们在原始数组中的嵌套深度如何。
例如,使用这个生成器函数:
const nestedArray = [1, [2, [3, 4], 5], 6];
const traversal = inorderTraversal(nestedArray);
for (const value of traversal) {console.log(value); // 输出: 1, 2, 3, 4, 5, 6
}
这将按照中序遍历的方式打印出嵌套数组中的所有数字。
5. 使用.next()
方法控制的案例
当然,以下是一个使用生成器函数和next()
方法的简单案例。这个例子中的生成器函数会逐步产出一系列的斐波那契数列。
function* fibonacciGenerator() {let a = 1, b = 1;while (true) {yield a;[a, b] = [b, a + b]; // 使用数组解构赋值来交换a和b的值,并计算下一个斐波那契数}
}
// 创建生成器对象
const fib = fibonacciGenerator();
// 使用next()方法来获取斐波那契数列的前10个数字
for (let i = 0; i < 10; i++) {console.log(fib.next().value);
}
执行上述代码将输出斐波那契数列的前10个数字:
1
1
2
3
5
8
13
21
34
55
解释:
fibonacciGenerator
是一个生成器函数,它使用yield
来产出斐波那契数列的每个数字。- 在生成器函数内部,我们使用一个无限循环来持续计算斐波那契数列的下一个数字,并在每次循环中使用
yield
来产出当前的数字。 - 创建生成器对象
fib
后,我们通过循环调用next()
方法10次来获取数列的前10个数字。 - 每次调用
next()
方法时,生成器函数都会从上次yield
的地方继续执行,计算下一个斐波那契数,并再次yield
它。 next().value
返回的是yield
产出的值,即当前的斐波那契数。
注意,由于生成器函数内部是一个无限循环,如果你不限制next()
的调用次数,它会无限产出斐波那契数列的数字。在实际使用中,你通常会根据需要来决定调用next()
的次数,或者使用其他逻辑来终止生成器函数的执行。
3.省流总结
· generator函数,也是用于解决异步编程问题的一个方法。很标志性的结构是比一般函数多了一个*
function*(){}
,返回的是内部指针。在函数内部有yield
,意思是在这里移交执行权跳到下一个任务。
· 使用前先创建生成器对象
· 可以通过.next()
来获取生成器对象,以及用value属性调取对象值
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
力扣的js入门免费题刷完了,开始自己找题练练,顺便捡捡知识点 力扣2649 1.思路 一眼递归,但事实证明也可以直接flat手撕。 arr.flat(Infinity) //直接扁平化到最底层涉及到了一些关于生成器和异步编程相关的知识点,学一下。 2.…...
![](https://i-blog.csdnimg.cn/direct/ee1f02cc150d49c898fa761130f33d4c.png)
深入了解jdbc-02-CRUD
文章目录 操作和访问数据库Statement操作数据表的弊端sql注入问题PreparedStatement类ResultSet类与ResultSetMetaData类资源的释放批量插入 操作和访问数据库 数据库的调用的不同方式: Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。PreparedStatem…...
![](https://img-blog.csdnimg.cn/img_convert/c7108b41f8ee3a2d606c1c5522425254.gif)
《基于 Kafka + Quartz 实现时限质控方案》
📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...
![](https://www.ngui.cc/images/no-images.jpg)
浏览器的卡顿与react的解决思路
以下内容是阅读过程中结合自己的思考而诞生的产物,不一定准确,但相反的,可能个人对实际情况有很大的误解。 仅做参考,欢迎指正。 前面提到浏览器显示的其实是渲染流程最后渲染出来的一张图片,而一个行为引起的副作用需…...
![](https://i-blog.csdnimg.cn/direct/afd38d6d7b584ca990dd14facda5b024.png)
XXE:XML外部实体引入
XXE漏洞 如果服务器没有对客户端的xml数据进行限制,且版本较低的情况下,就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件,其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害:任意文件读…...
![](https://i-blog.csdnimg.cn/direct/657ff55d27834f3da7ece58696146565.jpeg)
3D培训大师创新培训体验,加速空调关键组件的高效精准安装
如今,空调系统的复杂性和精密性与日俱增,对专业技术人员的要求也日益提高。尤其是决定空调是否能平稳运行的空调关键组件的装配培训,不再局限于传统的理论讲解和实体模型演示,而是更注重数字化、沉浸式学习。 案例背景 某空调公…...
![](https://i-blog.csdnimg.cn/direct/c923c81636c64863ba9a5121e33c7bf2.png)
PyTorch 深度学习实践-循环神经网络(高级篇)
视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限,重看几遍吧,第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…,一个名字是一个序列 rnn用GRU 用ASCII表作为词典,长度为128&#x…...
![](https://i-blog.csdnimg.cn/direct/d3ca33e91d0842fda39ff2eda971da72.png#pic_center)
这才是老板喜欢的电子信息类简历
点击可直接使用...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL学习之事务,锁机制
事务 什么是事务? 事务就是逻辑上的一组操作,要么全做,要么全不做 事务经典例子:转账,转账需要两个操作,从一个人账户上减钱,在另一个账户上加钱,比如说小红给小明转账100元&…...
![](https://i-blog.csdnimg.cn/direct/526f7f7a740743198005a3567072bfab.png)
开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程
在当今数字化时代,知识付费作为一种新型的经济模式,正逐渐受到越来越多内容创作者、专家及商家的青睐。开源知识付费小程序源码和内容付费系统PHP源码作为实现这一模式的重要工具,为构建高效、安全、可扩展的知识付费平台提供了强大的技术支持…...
![](https://img-blog.csdnimg.cn/img_convert/69b0b0f2b4a25379527f390b6da455a5.gif)
时序数据库如何选型?详细指标总结!
工业物联网场景,如何判断什么才是好的时序数据库? 工业物联网将机器设备、控制系统与信息系统、业务过程连接起来,利用海量数据进行分析决策,是智能制造的基础设施,并影响整个工业价值链。工业物联网机器设备感知形成了…...
![](https://www.ngui.cc/images/no-images.jpg)
【前端】JavaScript入门及实战51-55
文章目录 51 函数52 函数的参数53 返回值54 练习55 return 51 函数 <!DOCTYPE html> <html> <head> <title></title> <meta charset "utf-8"> <script type"text/javascript">/* 函数:1. 函数也是…...
![](https://img-blog.csdnimg.cn/img_convert/2eed67c94685ced67b5f4743009a09ee.jpeg)
【引领未来智造新纪元:量化机器人的革命性应用】
在日新月异的科技浪潮中,量化机器人正以其超凡的智慧与精准的操作,悄然改变着各行各业的生产面貌,成为推动产业升级、提升竞争力的关键力量。今天,让我们一同探索量化机器人在不同领域的广泛应用价值,见证它如何以科技…...
![](https://www.ngui.cc/images/no-images.jpg)
山东航空小程序查询
山东航空小程序 1) 请求地址 https://scxcx.sda.cn/mohe/proxy?url/trp/ticket/search 2) 调用方式:HTTP post 3) 接口描述: 接口描述详情 4) 请求参数: {"dep": "TAO","arr": "HRB","flightDate&qu…...
![](https://i-blog.csdnimg.cn/direct/cd45c786a1394a409762be03ee762c63.png)
MySQL添加索引时会锁表吗?
目录 简介Online DDL概念Online DDL用法总结 简介 在MySQL5.5以及之前的版本,通常更改数据表结构操作(DDL)会阻塞对表数据的增删改操作(DML)。 MySQL5.6提供Online DDL之后可支持DDL与DML操作同时执行,降低…...
![](https://img-blog.csdnimg.cn/img_convert/06412f26e95f6cf6bcba7be6d87a969d.png)
算法日记day 16(二叉树的广度优先遍历|反转、对称二叉树)
一、二叉树的层序遍历 题目: 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:[[3]…...
![](https://i-blog.csdnimg.cn/direct/648e148cd65e4cefa4d28341b6f09d7d.png)
PolarisMesh源码系列--Polaris-Go注册发现流程
导语 北极星是腾讯开源的一款服务治理平台,用来解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题。在分布式和微服务架构的治理领域,目前国内比较流行的还包括 Spring Cloud,Apache Dubbo 等。在 Kubernete…...
![](https://i-blog.csdnimg.cn/direct/4b339f1eb6824e99907a4f56da3517e2.png)
vue3 vxe-grid修改currentPage,查询数据的时候,从第一页开始查询
1、当我们设置好VxeGrid.Options进行数据查询的时候,下面是可能的设置: const gridOptions reactive<BasicTableProps>({id: UserTable,showHeaderOverflow: false,showOverflow: true,keepSource: true,columns: userColumns,size: small,pagerConfig: {cur…...
![](https://img-blog.csdnimg.cn/img_convert/876540e9dd5deb15c70ca500fb99d678.png)
电商数据集成之电商商品信息采集系统架构设计||电商API接口
一、引言 本架构设计文档旨在阐述基于 Selenium 的电商商品信息采集系统的整体架构,包括系统视图、逻辑视图、物理视图、开发视图和进程视图,并提供一个简单的采集电商商品信息的 demo。该系统通过模拟浏览器行为,实现对电商商品信息的自…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Cloud Stream 实现统一消息通信平台
1. 概述 Spring Cloud Stream:是Spring提供的消息通信框架,旨在构建跨不同消息中间件的统一通信平台。目的:通过消息通信机制降低分布式系统中服务间的耦合度,实现异步服务交互。 2. 消息通信与RPC RPC:远程过程调用…...
![](https://i-blog.csdnimg.cn/direct/ddf5a7fbed7446f38187994f44d907de.png)
uniapp安卓plus原生选择系统文件
uniapp安卓plus原生选择系统文件 效果: 组件代码: <template xlang"wxml" minapp"mpvue"><view></view> </template> <script>export default {name: file-manager,props: {},data() {return {is…...
![](https://i-blog.csdnimg.cn/direct/548d595710f04b54b4bc6fd9b3363440.png)
Go语言 Import导入
本文主要介绍Go语言import导入使用时注意事项和功能实现示例。 目录 Import 创建功能文件夹 加法 减法 主函数 优化导入的包名 .引入方法 总结 Import 创建功能文件夹 做一个计算器来演示,首先创建test文件夹。 加法 在test文件夹中创建add文件夹ÿ…...
![](https://img-blog.csdnimg.cn/d7384960084049a897e65b9134364db0.png)
一款异次元小清新风格的响应式wordpress个人博客主题
一款异次元小清新风格的响应式个人博客主题。这是一款专注于用户阅读体验的响应式 WordPress 主题,整体布局简洁大方,针对资源加载进行了优化。 Kratos主题基于Bootstrap和Font Awesome的WordPress一个干净,简单且响应迅速的博客主题&#x…...
![](https://i-blog.csdnimg.cn/direct/5629f179566d4106956db482b2c2eeb1.png)
【cocos creator】ts中export的模块管理
在 TypeScript(TS)中,export 和 import 的概念与 Java 中的 public 类、接口以及 import 语句有一些相似之处。可以用以下方式来类比理解: Export 在 TypeScript 中,export 用于将模块中的变量、函数、类等暴露给外部…...
![](https://www.ngui.cc/images/no-images.jpg)
QT JSON使用实例
下面是一个使用Qt框架的示例代码,展示如何获取仪器的状态,将其打包成JSON格式,保存到当前目录下的JSON文件中,然后通过FTP发送该文件。 1. 准备工作 确保你已经安装了Qt,并创建一个新的Qt Console项目或Qt Widgets项目…...
![](https://i-blog.csdnimg.cn/direct/d53f80ff0c4c46a38c386788c741ac5e.png)
浅聊 Three.js 屏幕空间反射SSR-SSRShader
浅聊 Three.js 屏幕空间反射SSR(2)-SSRShader 前置基础 渲染管线中的相机和屏幕示意图 -Z (相机朝向的方向)||| -------------- <- 屏幕/投影平面| | || | || | (f) | <- 焦距| | ||…...
![](https://www.ngui.cc/images/no-images.jpg)
Windows图形界面(GUI)-DLG-C/C++ - 月历控件(MonthCalendar)
公开视频 -> 链接点击跳转公开课程博客首页 -> e链接点击跳转博客主页 目录 月历控件(MonthCalendar) 使用场景 控件操作 月历控件(MonthCalendar) 使用场景 日程安排:用户可以通过月历控件选择特定的日期来安排会议或活动。事件管理&#x…...
![](https://i-blog.csdnimg.cn/direct/4d0e0430339b4d62919a71679b40c083.png)
【Langchain大语言模型开发教程】基于文档问答
🔗 LangChain for LLM Application Development - DeepLearning.AI Embedding: https://huggingface.co/BAAI/bge-large-en-v1.5/tree/main 学习目标 1、Embedding and Vector Store 2、RetrievalQA 引包、加载环境变量 import osfrom dotenv import…...
![](https://i-blog.csdnimg.cn/direct/62df634ef31b433288a4f9ca982130f0.png)
大厂面试-基本功
大厂面试第4季 服务可用性多少个9是什么意思遍历集合add或remove操作bughashcode冲突案例BigdecimalList去重复IDEA Debugger测试框架ThreaLocal父子线程数据同步 InheritableThreadLocal完美解决线程数据同步方案 TransmittableThreadLocal 服务可用性多少个9是什么意思 遍历集…...
![](https://i-blog.csdnimg.cn/direct/9c54e5d9f8da4cb79efd36182296c56c.png)
RV1103使用rtsp和opencv推流视频到网页端
参考: Luckfox-Pico/Luckfox-Pico-RV1103/Luckfox-Pico-pinout/CSI-Camera Luckfox-Pico/RKMPI-example Luckfox-Pico/RKMPI-example 下载源码 其中源码位置:https://github.com/luckfox-eng29/luckfox_pico_rtsp_opencv 使用git clone由于项目比较大&am…...
![](/images/no-images.jpg)
wordpress页面图片如何排版/合肥网络推广
moment.js不依赖任何第三方库,支持字符串、Date、时间戳以及数组等格式,可以像PHP的date()函数一样,格式化日期时间,计算相对时间,获取特定时间后的日期时间等等,本文有如下举例。 格式化日期 当前时间&…...
![](https://images2015.cnblogs.com/blog/936656/201703/936656-20170328155904498-379228007.png)
南阳网站排名优化价格/百度平台商家联系方式
一、概述 之前小编我写了一遍内置函数第一篇,因为内置函数的内容太多了,所以小编把它分开写了,防止太多搞乱了。 内置函数博客地址:猛击这里 二、内置函数详情 1、filter(function, iterable) 功能:通过function过滤条…...
![](/images/no-images.jpg)
网页制作与网站建设实战大全/提高搜索引擎排名
use命令可以让我们来使用数据库。use命令格式: use ;例如,如果xhkdb数据库存在,尝试存取它:mysql> use xhkdb;屏幕提示:Database changed1) use 语句可以通告MySQL把db_name数据库作为默认(当前)数据库使用…...
推荐做木工的视频网站/seo综合查询网站
这两天关于"东北人口加速减少"的新闻甚嚣尘上,昨天相关新闻跟贴多达几十万。背井离乡的东北人纷纷讲述自己离开的原因,留在东北的人则吐露现在生活如何艰辛。那么东北经济因何没落?为何人才流失严重?如何才能拯救东北&a…...
![](https://img-blog.csdnimg.cn/img_convert/346c64f89d2436e11e51252044d7eaf0.png)
做博客和做网站/外贸网站推广seo
------------ 本文来自 Linux用户及权限命令 - 阿P博客,技术博客,个人博客, 博客www.wxqsearch.cn一、用户相关信息存储位置账户信息存储:/etc/passwd密码信息存储:/etc/shadow组信息:/etc/group二、用户管理useradd:创建创建to…...
![](https://img-blog.csdnimg.cn/img_convert/39119fac39059b64817699818002d26a.png)
现在哪些做进口商品的电商网站/百度网盘下载app
配置本地tomcat服务器时间查看时间 内容精选换一换弹性云服务器显示的Windows操作系统时间与本地标准时间不一致。系统时间由于受到网络或一些进程驱动的影响可能会出现和标准时间不一致的情况。手动同步系统时间。单击桌面右下角的“更改日期和时间设置”,打开“日…...