当前位置: 首页 > news >正文

【前端面试】七、算法-迭代器和生成器

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>迭代器和生成器</title>
</head>
<body><script>/*   迭代器lterator(也被称作游标Cursor),是一种设计模式迭代器提供了一种遍历内容的方法(比如 JS 迭代器中的next),而不需要关心内部构造。生成器(Generator)本身也是一种设计模式,用于构造复杂对象, JS 中的生成器,用于构造迭代器。*/// 迭代器的遍历const s = new Set([1,2,3,4,5])const it = s.values()// console.log(it); // SetIterator {1, 2, 3, 4, 5}const it1 = s.values()// console.log([...it1]); // [1, 2, 3, 4, 5]const it2 = s.values()for (const val of it2) {// console.log(val); // 1 2 3 4 5} let val = nullwhile(!(val = it.next()).done) {// console.log(val);// {value: 1, done: false}// {value: 2, done: false}// {value: 3, done: false}// {value: 4, done: false}// {value: 5, done: false}}/* Array.from(arrayLike, mapFn, thisArg)arrLike:想要转换成数组的伪数组对象或可迭代对象mapFn:如果指定了该参数,新数组中的每个元素会执行该回调函数thisArg:可选参数,执行回调函数 mapFn 时 this 对象 */const it3 = s.values()const arr = Array.from(Array(5), it3.next, it3).map(x => x.value) // [1, 2, 3, 4, 5]/* 生成器简化语法、写起来少考虑一些问题(示例少考虑了concat)节省空间(示例中函数体不需要定义数组承载值)分散执行片段(节省单位时间的处理量)--对于单线程的前端非常重要构造异步语法 */// 生成器构造无穷斐波那契数列function* fibonacci() {let [prev, curr] = [1, 1]yield prevyield currwhile(true) {[prev, curr] = [curr, prev + curr]yield curr}}const fib = fibonacci()const fib10 = Array.from(Array(10), fib.next, fib).map(x => x.value)// console.log(fib10) // [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]// Generator异步语法function request (url) {return cb => {setTimeout(() => {cb(url)}, 1000)}}function createRunner (genFunc) {const it = genFunc()function run (data) {const result = it.next(data)if (result.done) returnresult.value(run)}return run}createRunner(function* () {const res1 = yield request('url1')console.log(res1)const res2 = yield request('url2')console.log(res2)})()</script></body>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Stable Diffusion】(基础篇九)—— 扩展
  • 黑客的收入到底怎么样?
  • 物理笔记-八年级上册
  • Springcloud物流配送后台-计算机毕业设计源码69809
  • 区块链的介绍和应用场景以及发展趋势
  • GORM更新操作(Save、Update、Updates)
  • 十大人力资源SAAS软件:企业管理的革新者
  • 【学术会议征稿】第三届环境遥感与地理信息技术国际学术会议(ERSGIT 2024)
  • 职业教育大数据实验实训室建设应用案例
  • 听专家的,不如听国家的,网络安全究竟值不值得报?
  • 人大高瓴发布Think-on-Graph 2.0,基于知识图的大模型推理再升级!
  • fastadmin中控制下级管理员能不能查看
  • C#与欧姆龙PLC 通信——fins udp协议
  • 高效率自动写作文章,AI写作生成器轻松为你搞定
  • 【redis】redis高可用 哨兵模式 一主二从三哨兵部署教程
  • 【技术性】Search知识
  • 03Go 类型总结
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • chrome扩展demo1-小时钟
  • JAVA多线程机制解析-volatilesynchronized
  • Java应用性能调优
  • LeetCode29.两数相除 JavaScript
  • magento 货币换算
  • Markdown 语法简单说明
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • php面试题 汇集2
  • Sublime text 3 3103 注册码
  • Vim 折腾记
  • 排序(1):冒泡排序
  • 漂亮刷新控件-iOS
  • 区块链分支循环
  • 通信类
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​​​【收录 Hello 算法】9.4 小结
  • ​zookeeper集群配置与启动
  • ​第20课 在Android Native开发中加入新的C++类
  • #### golang中【堆】的使用及底层 ####
  • #pragma once
  • (1)bark-ml
  • (6)设计一个TimeMap
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (四)鸿鹄云架构一服务注册中心
  • (未解决)macOS matplotlib 中文是方框
  • (五)c52学习之旅-静态数码管
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Core Web APi类库如何内嵌运行?
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net dataexcel winform控件 更新 日志
  • .NET 给NuGet包添加Readme
  • .NET 使用配置文件
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET_WebForm_layui控件使用及与webform联合使用
  • @ConditionalOnProperty注解使用说明