当前位置:网站首页>迭代器和生成器
迭代器和生成器
2022-07-27 05:03:00 【huijie_0716】
迭代器
一、for in
二、for of
//使用of遍历字符串
letstr="helloworld";
for(letsofstr){
console.log(s)
}
//使用of遍历数组
letarr=["hello","world"]
for(letkofarr.keys()){
console.log(k);
}
for(letvofarr.values()){
console.log(v);
}
for(let[k,v]ofarr.entries()){
console.log(k,v);
}
//使用in遍历对象
letobj={"name":"qiku","addr":"东三街"}
for(letkinobj){
console.log(k,obj[k]);
}三、 迭代器
1、迭代器 一定能 for of 迭代
2、可迭代对象 不一定是 迭代器
四、可迭代的数据结构
生成器
一、定义生成器
其中*用来表示函数为Generator函数,yield用来定义函数内部的状态
生成器 一定是 迭代器
function * myGen(){
yield 0;
yield 1;
yield 2;
}
var x=myGen();
for(let i of x){
console.log(i);
}
console.log(x.next());
console.log(x.next());
console.log(x.next());
console.log(x.next());
console.log(x);1、第一次调用next方法时,从Generator函数的头部开始执行,先是打印了one,执行到yield就停下来,并将yield后边42/76表达式的值'1',作为返回对象的value属性值,此时函数还没有执行完,返回对象的done属性值是false。2、第二次调用next方法时,同上步。3、第三次调用next方法时,先是打印了three,然后执行了函数的返回操作,并将return后面的表达式的值,作为返回对象的value属性值,此时函数已经结束,多以done属性值为true。4、第四次调用next方法时,此时函数已经执行完了,所以返回value属性值是undefined,done属性值是true。如果执行第三步时,没有return语句的话,就直接返回{value:undefined,done:true}。
二、使用生成器 为 对象 提供 迭代接口
var obj={
name:'张三',
age:13,
sex:'男',
hobby:'足球,排球,篮球'
}
function * objectGen(obj){
for(let i in obj){
yield [i,obj[i]];
}
}
for(let i of objectGen(obj)){
console.log(i);
}
三、 大数据产生的 优化方法
按需产生数据
function* bigData() {
for (let i = 0; i < 100000; i++) {
yield parseInt(Math.random() * 100000));
}
}
var x = bigData();
var arr = [];
for(let i of x){
arr.push(i);
}
//console.log(arr)四、 使用生成器 实现 异步执行程序方式
function* sing() {
for (let i = 0; i < 10; i++) {
yield '唱歌' + i;
}
}
function* dance() {
for (let i = 0; i < 10; i++) {
yield '跳舞' + i;
}
}
function* rap(num) {
for (let i = 0; i < num; i++) {
yield 'rap' + i;
}
}
var s = sing();
var d = dance();
var r = rap(20);
while (true) {
let t1 = s.next();
console.log(t1.value);
let t2 = d.next();
console.log(t2.value);
let t3 = r.next();
console.log(t3.value);
if (t1.done && t2.done && t3.done) {
console.log('完成');
break;
}
}边栏推荐
- Common commands in CONDA and pip environments
- SQL database → constraint → design → multi table query → transaction
- Dnsmasq Usage Summary
- Pytorch data type and numpy data are mutually transformed
- cookie增删改查和异常
- JDBC API details
- C语言函数入门介绍
- 消息可靠性处理
- SQL (MySQL) rookie tutorial knowledge
- Makefile is easy to understand and explain
猜你喜欢
随机推荐
C语言入门介绍
DNSmasq使用总结
p7 day1 初识Flask框架
Redis cluster
B1030 perfect sequence
后台品牌管理功能实现
Multiplication sorting in torch, * & torch. Mul () & torch. MV () & torch. Mm () & torch. Dot () & @ & torch. Mutmal ()
如何查看导师的评价
李宏毅机器学习组队学习打卡活动day01---机器学习介绍
使用vertical-align不能让图片和文字垂直居中对齐
mysql 取消外键关联约束
JDBC API details
Hi3516DV300环境搭建
Differences among bio, NiO and AIO
用pygame自己动手做一款游戏01
用户登录-以及创建、验证短信验证码
李宏毅机器学习组队学习打卡活动day05---网络设计的技巧
pytorch中几个难理解的方法整理--gather&squeeze&unsqueeze
【codeforces 1695C Zero Path】DP
初识C语言——什么是C语言








