1、什么适合迭代器
迭代器是一个对象,它定义一个序列,并在终止时可能返回一个返回值。
2、内置的可迭代对象
Array Arguments Set Map String NodeList 等
3、迭代器的工作原理
迭代器是一种用于遍历数据集合的对象,它提供了一种统一的方式来访问集合中的元素,而无需暴露集合的内部实现细节。迭代器通常具有两个主要方法:
__iter__()和__next__()。
1、一旦创建,迭代器对象可以通过重复调用 next()显式地迭代。
2、 迭代一个迭代器被称为消耗了这个迭代器,因为它通常只能执行一次。
3、在产生终止值之后, 对 next()的额外调用应该继续返回{done:true}
let xiyou = ['q', 'w', 'e', 'r']
for (let i in xiyou) console.log(i)//0,1,2
for (let i of xiyou) console.log(i)//q,w,e,r
let iteator = xiyou[Symbol.iterator]()
console.log(iteator.next()) // q
console.log(iteator.next()) // w
console.log(iteator.next()) // e
console.log(iteator.next()) // r
4、迭代器的应用
const banji = {
name: '终极一班',
stus: [
'x',
'w',
'c',
'g'
]
}
for (let v of banji) {
console.log(v) // banji is not iterable
}
目的:输出数组的内容x,w,c,g。通过输出结果可知banji这个对象是不可迭代,此时就需要通过在banji这个对象中添加Symbol iterator来自定义可迭代性。如下代码 :
const banji = {
name: '终极一班',
stus: [
'x',
'w',
'c',
'g'
],
[Symbol.iterator]() { //完成自定义迭代器
let index = 0
let _this = this
return {
next: function () {
if (index < _this.stus.length) {
const result = {
value: _this.stus[index], done: false
}
index++
return result
} else {
return {
value: undefined, done: true
}
}
}
}
}
}
for (let i of banji) {
console.log(i) //x,w,x,g
}
4、自定义的可迭代对象
var myIterable = {
*[Symbol.iterator]() {
yield 1;
yield 2;
yield 3;
},
};
for (let value of myIterable) {
console.log(value);
}
// 1
// 2
// 3
// 或者
[...myIterable]; // [1, 2, 3]