ES6迭代器、Set、Map集合和async异步函数
目录
迭代器
Iterator 的作用
Iterator 的遍历过程
Set
Map集合
map和对象区别?
async异步函数
迭代器
迭代器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)。
Iterator 的作用
为各种数据结构,提供一个统一的、简便的访问接口;
使得数据结构的成员能够按某种次序排列;
ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。
Iterator 的遍历过程
-
创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
-
第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
-
第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
-
不断调用指针对象的next方法,直到它指向数据结构的结束位置。
/*** 数组 keys values entries* 方法全部返回迭代器对象 就可以使用 for of遍历* 迭代器接口本质就是调用迭代器对象的next方法 指针 * 调用next方法会依次指向内部成员*/
let arr = [1,2,3,4,5];
let keys = arr.keys();
let values = arr.values();
let entries = arr.entries();
console.log(keys.next()); //{ value: 0, done: false }
console.log(keys.next()); //{ value: 1, done: false }
console.log(keys.next()); //{ value: 2, done: false }
console.log(keys.next()); //{ value: 3, done: false }
console.log(keys.next()); //{ value: 4, done: false }
console.log(keys.next()); //{ value: undefined, done: true }
// console.log(values.next());
// console.log(entries.next());
// let result;
// while(!(result = keys.next()).done){
// console.log(result.value); //这里用keys.next() 会再次执行一次
// }console.log(keys,values,entries);
for(let key of keys){console.log(key,'key');
}
for(let value of values){console.log(value,'value');
}
for(let entry of entries){console.log(entry,'entry');
}function test(){// arguments 是迭代器对象for(let key of arguments){console.log(key);}
}
test('1','2',3,4,5)
原生具备 Iterator 接口的数据结构如下
Array、Map、Set、String、TypedArray、arguments、NodeList
我们还可以把原来不是可迭代的数据类型变成可迭代的,这样就能支持for...of循环啦,比如说objct!如果我们直接对对象执行for...of肯定会出错:
let obj = {name:'zhangsan',age:12
}for(let key of obj){ //报错 obj is not iterableconsole.log(key);
}
let obj = {name:'zhangsan',age:12
}// for(let key of obj){ //报错 obj is not iterable
// console.log(key);
// }
let keys = Object.keys(obj);
console.log(keys);
for(let key of keys){console.log(key);
}
Set
Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构。Set 构造函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。
/*** set集合* 特点:内部成员值是唯一的* 参数:无或者实现了迭代器接口的数据结构 数组 字符串* 创建使用set构造函数 new Set() typeof*/
let set = new Set();
// console.log(set,typeof(set),set instanceof Object);
// 添加内部成员 add
// 注意:如果是基本数据类型相同的值添加两次会自动去重
// 如果是引用数据类型 会添加多次 (引用地址不同)
set.add('hello');
set.add('world');
set.add('hello');
let arr1 = [];
set.add(arr1);
set.add([]);
console.log(set);// 删除内部成员delete
// 注意:删除引用数据类型的时候如果是内容则无法删除 是指向地址的变量则可以删除
set.delete([]); //无法删除
set.delete(arr1); //可以删除
console.log(set);// 遍历set集合
console.log(set.keys());
console.log(set.values());
console.log(set.entries());
for(let key of (set.keys())){console.log(key);
}
set.forEach((key,value)=>{console.log(key,value);
})/*** has 检验set集合有没有该内部成员* 引用数据类型最好放引用地址*/
console.log(set.has('hello'));
console.log(set.has([]));/*** 属性* 查看set内部成员个数 size*/
console.log(set.size);
let obj = {};
set.add(obj);
console.log(set.size);/*** 应用 数组去重 set*/
let set1 = new Set([1,2,3,4,3,2,1]);
console.log(set1);
let res1 = Array.from(set1);
console.log(res1);
console.log(set1[0]);
let res2 = Array.prototype.slice.call(set1,0);
console.log(res2);let res3 = [...set1];
console.log(res3);let set2 = new Set('hello');
console.log(set2);
Map集合
Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。
/*** 键值对的一种数据结构 键可以是任意数据类型*/
let obj = {name:'zhangsan',age:12,[Symbol('email')]:"123456@qq.com",
}
obj[{}] = 1; //期望出现{} =>1 结果出现'[object Object]' => 1
let res = Object.entries(obj);
let map = new Map(res);
console.log(map,typeof map,map instanceof Object);
map.set({},1);
map.set([],function(){});
map.set(undefined,'hello');
console.log(map);
/*** 遍历map keys values entries forEach*/
console.log(map.keys());
console.log(map.values());
console.log(map.entries());for(let key of map){console.log(key,'22222');
}map.forEach((key,value)=>{console.log(key,value);
})map.forEach((key,value)=>{console.log(value,key,'value是值,key是键');
})console.log(map.size);
// 删除某一个属性
map.delete('name');
console.log(map);
// 获取属性键对应的值
console.log(map.get('age'));
console.log(Map.prototype);
console.log(Set.prototype);
map和对象区别?
1.map键可以是任意数据类型,对象键只能是字符串或者symbol值
2.map可以使用for...of遍历,实现了迭代器接口
3.对象只能使用for in 循环遍历 因为没有实现迭代器接口
4.map可以直接调用forEach方法进行遍历
5.map的键值对数量可以直接通过size属性获取,对象需要手动获取
6.map更适合键值对,频繁删除map做了一些优化
7.map内部键值对有序,对象属性是无序。
async异步函数
async函数是使用async关键字声明的函数。 async函数是AsyncFunction构造函数的实例, 并且其中允许使用await关键字。async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。
await关键字只在async函数内有效。如果你在async函数体之外使用它,就会抛出语法错误 SyntaxError 。async/await的目的为了简化使用基于promise的API时所需的语法。async/await的行为就好像搭配使用了生成器和promise。async函数一定会返回一个promise对象。如果一个async函数的返回值看起来不是promise,那么它将会被隐式地包装在一个promise中。
简单来说 是一个函数,是一个异步编程解决方案,内部封装了generator函数,是一个语法糖,内部自带执行器,与await配合使用;异步编程,同步处理。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>
</head><body><script>async function getFindAll() {try {let res = await axios.get('http://121.199.0.35:8888/index/carousel/findAll');console.log(res);} catch {throw new Error('请求失败')} finally {console.log('请求完成');}}getFindAll();</script>
</body></html>
相关文章:

ES6迭代器、Set、Map集合和async异步函数
目录 迭代器 Iterator 的作用 Iterator 的遍历过程 Set Map集合 map和对象区别? async异步函数 迭代器 迭代器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口&…...

mac android studio设置跟mac系统一样的快捷键
mac版的android studio 跟mac系统的快捷键不一样,主要修改了下面几组操作,为了跟mac系统快捷键相同 setting->Keymap 搜索bottom 修改3个快捷键: cmd↓ 设置让鼠标移动到屏幕最后面 shiftcmd↓ 选中从当前位置到屏幕最下面 option↓. 或者 end 滚动到屏幕最下方 // 因为默认…...

Java-通过IP获取真实地址
文章目录 前言功能实现测试 前言 最近写了一个日志系统,需要通过访问的 IP 地址来获取真实的地址,并且存到数据库中,我也是在网上看了一些文章,遂即整理了一下供大家参考。 功能实现 这个是获取正确 IP 地址的方法,可…...
Java代码实现word转PDF
import com.spire.doc.Document; import com.spire.doc.FileFormat; import lombok.extern.slf4j.Slf4j; public class WordConvertPdf { /** * word转pdf * param wordPathName word文件路径及名称 * param pdfPathName pdf生成路径及名称 */ public static void wordToPdf(…...
Java设计模式-简单工厂(Simple Factory)模式
介绍 简单工厂(Simple Factory)模式,又称为静态工厂方法(Static Factory Method)模式。 由一个工厂类来创建具体产品,即创建具体类的实例。 简单工厂模式从概念上涉及三个角色: 抽象产品角色…...
微软所有业务线梳理
目录 一、Windows 二、Office 三、Surface 四、Xbox 五、Azure 六、Dynamics 七、LinkedIn 八、Bing...

SDN系统方法 | 1. 概述
随着互联网和数据中心流量的爆炸式增长,SDN已经逐步取代静态路由交换设备成为构建网络的主流方式,本系列是免费电子书《Software-Defined Networks: A Systems Approach》的中文版,完整介绍了SDN的概念、原理、架构和实现方式。原文: Softwar…...

【数据分享】1929-2022年全球站点的逐日平均压力数据(Shp\Excel\12000个站点)
气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…...

Profibus DP主站转Modbus TCP网关profibus从站地址范围
远创智控YC-DPM-TCP网关。这款产品在Profibus总线侧实现了主站功能,在以太网侧实现了ModbusTcp服务器功能,为我们的工业自动化网络带来了全新的可能。 远创智控YC-DPM-TCP网关是如何实现这些功能的呢?首先,让我们来看看它的Profib…...

MySQL子查询
😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:进入MySQL专栏知…...
学IT上培训班有用吗?
在学习IT技术的过程中,你是否也被安利过各种五花八门的技术培训班?这些培训班都是怎样向你宣传的,你又对此抱有着怎样的态度呢?在培训班里学技术,真的有用吗? 首先,IT行业是一个充满机遇和挑战…...

BI如何对接金蝶云星空数据源?奥威BI SaaS平台有绝招
传统BI部署时需要大量硬件和软件支持,而SaaS BI不仅不需要,还能让企业的数据可视化分析变得更加简单便捷,因此已经渐渐成为数字化时代的BI新趋势。那么,SaaS BI平台是如何快速接入数据完成数据可视化分析的?下面就以奥…...
鼎镁科技冲刺A股上市失败,董事长涂季冰三年薪水超过6000万元
7月15日,上海证券交易所披露的信息显示,因鼎镁新材料科技股份有限公司(下称“鼎镁科技”)审核不通过,上海证券交易所终止其发行上市审核。这意味着,鼎镁科技此次上市之旅彻底失败。 据贝多财经了解…...
PostgreSQL【应用 02】扩展SQL之C语言函数(编写、编译、载入)实例分享
C语言函数 1.准备1.1 开发文档1.2 工具安装 2.开始2.1 编写C语言函数2.2 编译和链接动态载入的函数 通过使用 PostgreSQL 的 C 函数接口,我们可以编写用 C 语言实现的函数,并将其集成到数据库中。这些函数可以在 SQL 查询中像其他内置函数一样被调用&…...

day37-框架
0目录 框架 1.框架介绍 2. SSM三大框架简介 3.Mybatis 4.拓展 1.框架介绍 1.1 为什么使用框架? (1)框架效率高,成本低 (2)框架是别人写好的构建,我们只需学会如何使用它(可维护性…...

基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现
功能介绍 以STM32单片机作为主控系统;LCD1602液晶显示屏来显示显示测得的值;SR501人体红外感应是否有人进行防盗;通过烟雾传感器MQ-2获取前的烟雾值;通过DHT11温湿度传感器来获取当前的温湿度;所有的信息通过通过esp82…...

jenkins 采用ssh方式连接gitlab连接不上
一、gitlab 添加jenkins服务器的公钥 jenkins 生成秘钥命令 ssh-keygen -t rsa2.jenkins 秘钥地址: cd /root/.ssh3.复制公钥 到gitlab 添加 cat id_rsa_pub4.添加私钥到jenkins cat id_rsa5.绑定(顺利的话到这里就结束了) ࿰…...

前缀和模板算法
一)模板前缀和 【模板】前缀和_牛客题霸_牛客网 (nowcoder.com) 前缀和:快速的得出数组中某一段连续区间的和 暴力破解的话需要从头到尾的进行遍历,时间复杂度就可以达到O(N),而前缀和时间复杂度是可以达到O(1)的 第一步:预处理创建出一个前缀和数组dp&a…...
SpringBoot 启动输出 Git 版本信息(2023/07/11)
SpringBoot 启动输出 Git 版本信息 文章目录 SpringBoot 启动输出 Git 版本信息1. 环境依赖2. pom.xml 配置3. 启动类配置 为了方便记录项目打包时的 Git 版本,本文将介绍如何将 Git 版本信息打包进 JAR 文件,并在项目启动时输出。 1. 环境依赖 SpringB…...
SSH客户端连接远程服务器
目录 一、什么是客户端连接远程服务器 二、什么是服务端连接远程服务器 三、查看网络信息 1、图形程序查看网络信息 2、命令查看网络信息 四、SSH客户端(Linux) 五、SSH客户端(windows) 六、SSH远程服务器 一、什么是客户…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...