当前位置:网站首页>ES6 —— 迭代器,生成器的基本使用
ES6 —— 迭代器,生成器的基本使用
2022-07-19 12:48:00 【探索前端究极秘法的小牛】
目录
特殊二:执行特殊 需要调用iterator.next方法才会执行
定义:next('BBB')传入的参数作为上一个next方法的返回值。
案例三:点击按钮,加载数据....,数据加载完成后影藏(加载数据文字)
一,迭代器(iterator)
定义:是一种遍历机制,有两个核心
1.迭代器是一个接口,能够快捷的访问数据,通过Symbol.iterator来创建迭代器,通过迭代器的next方法获取迭代之后的结果
返回的结果是迭代器对象
2.可以把迭代器当做是用于遍历数据结构的指针
const arr = ['a','b','c'];
let myIte = arr[Symbol.iterator]();//arr本身就具备迭代器接口 ,拿到这个iterator接口
//next() 方法 done如果为false表示遍历继续 如果为true表示遍历完成
console.log(myIte.next());//当第一次调用时指针指向值的是 {value: 'a', done: false}
console.log(myIte.next());//当第二次调用时指针指向值的是{value: 'b', done: false}
console.log(myIte.next());//当第三次调用时指针指向值的是{value: 'c', done: false}
console.log(myIte.next());//当第四次调用时数组中 没有{value: undefined, done: false}
效果图:
原理:
1.创建一个指针对象,指向当前数据结构的起始位置
2.第一次调用对象的next方法,指针白动指向数据结构的第一个成员
3.接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
4.每调用next方法返回一个包含value 和done 属性的对象
遍历对象 小案例
const Person = {
classroom: 'web2209',
subject: ['科学', 'PE', 'Chinese', 'English'],
//添加一个[Symbol.iterator]()方法
[Symbol.iterator]() {
//索引变量
let i = 0;
return {
next: () => {
if (i < this.subject.length) {
const result = { value: this.subject[i], done: false }
//索引自增
i++;
//返回结果
return result;
} else {
return { value: undefined, done: true }
}
}
}
}
}
for(let v of Person){
console.log(v);
}
效果图
二,生成器
含义:生成器其实就是一个特殊的函数
异步编程 纯 回调函数
特殊一:需要补一个 * 号
function * item() {
}
特殊二:执行特殊 需要调用iterator.next方法才会执行
function* item() {
console.log('hello,everybody!');
}
let iterator = item();
iterator.next()
特殊三:在生成器函数可以生成yield语句
可以将 yield 看做是函数代码的分隔符
function* item() {
// console.log(111);
yield '魏大勋';
// console.log(222);
yield '胡歌';
// console.log(999);
yield '彭于晏';
// console.log(888);
}
迭代器的返回结果
let iterator = item();
console.log( iterator.next());
console.log( iterator.next());
console.log( iterator.next());
console.log( iterator.next());
效果图:
生成器传参
定义:next('BBB')传入的参数作为上一个next方法的返回值。
function* cook(person) {
console.log(person);
let a1 = yield '盛米';
console.log(a1);
let a2 = yield '淘米';
console.log(a2);
let a3 = yield '煮米';
console.log(a3);
}
let cook_step = cook('张三');
cook_step.next();//张三
cook_step.next('a1');//a1
cook_step.next('a2');//a2
cook_step.next('a3');//a3
效果图
生成器函数小案例
案例一: 模拟获取 用户数据 订单数据 商品数据
function getuser() {
setTimeout(() => {
let data = '用户数据'
//调用 next方法 ,并且将数据传入
iterator.next(data);
}, 1000);
}
function getorders() {
setTimeout(() => {
let data = '订单数据'
//调用 next方法 ,并且将数据传入
iterator.next(data);
}, 2000);
}
function getgoods() {
setTimeout(() => {
let data = '商品数据'
//调用 next方法 ,并且将数据传入
iterator.next(data);
}, 3000);
}
// 声明一个生成器函数
function* item() {
console.log(yield getuser());
console.log(yield getorders());
console.log(yield getgoods());
}
//调用生成器函数
let iterator = item();
iterator.next();
案例三:点击按钮,加载数据....,数据加载完成后影藏(加载数据文字)
let btn = document.getElementById('btn');
let date = document.getElementById('date')
function item() {
btn.addEventListener('click', () => {
setTimeout(() => {
let data = '正在加载数据...'
iterator.next(data);
}, 1000);
})
}
function information() {
setTimeout(() => {
let person = "姓名: 张三, 年龄: 19, 班级: web2209"
iterator.next(person);
}, 2000);
}
function yincang() {
setTimeout(() => {
let str = '';
iterator.next(str);
})
}
function* items() {
date.innerHTML = yield item();
date.innerHTML = yield information();
yield yincang();
}
let iterator = items();
iterator.next()
效果图:
边栏推荐
- pytorch,筛选出一定范围的值
- 关于链游系统开发(智能合约上链原理分析说明)丨NFT链游系统开发原理分析及案例
- 中科方德系统适配产品(容器类)后谈
- clickhouse 20. Integration of X and Prometheus + grafana (III)
- Research on the best implementation scheme of feign
- Ceres曲线拟合
- Ceres robust curve fitting
- [mindspore] [read graph data] cannot read graph data in mindrecord format
- 分析脚手架
- Cuda Error in NCHWToNCHHW2解决
猜你喜欢
反射、、、
opencv学习(5)之鼠标操作 归一化 放缩 图像翻转
QGIS mosaic tile grid data
中科方德系统适配产品(容器类)后谈
如何做一个自律的人?
Istio 将应用暴露到互联网
Ceres曲线拟合
About the development of chain game system (analysis and description of the principle of smart contract uplink) - Analysis and cases of the development principle of NFT chain game system
NFT市场格局仍未变化,Okaleido能否掀起新一轮波澜?
shell编程(十) : [shell基础] 控制脚本
随机推荐
Open the link in wechat and jump to the follow page of official account
[special topic of golang database 5] golang language operation redis for addition, deletion, modification and query
图像标注开源小工具-labelImg
机器学习基础篇(1)之照片视频显示,鼠标,控件操作
关于响应式布局,你必须要知道的
Use octree structure to manage scenes
Super detailed basic MySQL operations
婚恋交友网站开发社交聊天平台代码分享(三)
PLC-LiSLAM线-面-圆柱体-激光SLAM
MySQL将查询的结果作为update更新的数据,且在原字段数据后 CONCAT拼接(lej)
Ceres calculation bundle adjustment
SDL文字显示
机器学习(1)环境配置
Cuda Error in NCHWToNCHHW2解决
磁盘空间单位GB与GiB是什么区别?
NFT市场格局仍未变化,Okaleido能否掀起新一轮波澜?
PostgreSQL学习之部署与简单使用
函數遞歸習題(easy版)
[mindspore] [read graph data] cannot read graph data in mindrecord format
npm warn config global `--global`, `--local` are deprecated. use `--location 解决方法