ES6中的可迭代对象

1. 在ES6中,数组、Set、Map、字符串都是可迭代对象。
2. 默认情况下定义的对象(Object)是不可迭代的,但是可以通过Symbol.Iterator创建迭代器。

Set

	var arr = ["红","黄","蓝","红"]
	var res = new Set(arr);
	console.log(res) //Set(3) {"红", "黄", "蓝"}

输出结果:
输出结果
可以看到Set()方法有点类似数组去重的效果,不过返回结果是可迭代的对象形式。

Map

	var person = new Map();
		person.set("name","张三")
		person.set("age","18")
		person.set("sex","男")
		console.log(person)
		for(let [key,value] of person){
			console.log(key+'-',value)
		} 

输出结果:
map迭代案例

Object

// object不可迭代demo
		var Student = {
			name:"张三",
			age:18,
			sex:"男"
		}
		for (let s of Student) {
			console.log(s)
		}

输出结果:
object不可迭代demo
以上用例可以看出Object是不可迭代的,但是我们可以通过Symbol.Iterator创建迭代器

// 为Student创建迭代器
		var Student = {
			name:"张三",
			age:18,
			sex:"男",
			*[Symbol.iterator](){ //*表示该函数为生成器
				for (let key in this) {
					yield [key,this[key]] //yield 用于返回值给生成器
				}
			}
		}
		console.log(Student)
		for (let [key,value] of Student) {
			console.log(key+'-',value)
		}

输出结果:
在这里插入图片描述
以上结果表明通过我们为Student对象手动创建的生成器即可实现对象的迭代,且迭代方式可以自定义。

数组、Set、Map都是可迭代对象,即它们内部实现了迭代器,且提供了3种迭代器函数调用

entries()返回迭代器:返回键值对

	// 数组
	var arr = ["红","黄","蓝","红"]
	for (let [key,value] of arr.entries()) {
		console.log(key+'-',value)
	}
	console.log('----------end------------')
	// Set
	var setArr = new Set(arr);
	for (let [key,value] of setArr.entries()) {
		console.log(key+'-',value)
	}
	console.log('----------end------------')
	// Map
	var person = new Map();
	person.set("name","张三")
	person.set("age","18")
	person.set("sex","男")
	for(let [key,value] of person.entries()){
		console.log(key+'-',value)
	}

输出结果:
在这里插入图片描述

values()返回迭代器:返回键值对的value

// 数组
	var arr = ["红","黄","蓝","红"]
	for (let value of arr.values()) {
		console.log(value) // 红,黄,蓝,红
	}

keys()返回迭代器:返回键值对的key

// 数组
	var arr = ["红","黄","蓝","红"]
	for (let key of arr.keys()) {
		console.log(key) // 0,1,2,3
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值