1.迭代器是帮助我们对某个数据结构进行遍历的对象, 它有一个 next 方法, next 方法返回一个对象。
2.如果该数据类型上有 symbol.interator 方法 则该数据类型可以被遍历
3.给对象添加 symbol.interator 方法可以指定该对象的遍历规则
二;Symbol.iterator 方法介绍// 迭代器工作原理
// 1.创建一个指针对象,指向当前数据结构的起始位置
// 2.第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员
// 3.不断调用 next 方法,指针一直向后移动,直到指向最后一个成员 (done属性值为true)
// 4.每调用 next 方法返回一个包含 value 和 done 属性的对象
// 4.每调用 next 方法返回一个包含 value 和 done 属性的对象
let iterator = xiyou[Symbol.iterator]();
console.log('iterator内容',iterator);
// 调用 interator 对象身上的 next 方法
console.log('next',iterator.next());
console.log('next',iterator.next());
console.log('next',iterator.next());
console.log('next',iterator.next());
console.log('next',iterator.next());
打印内容:
三;使用迭代器需求:遍历 banji 对象 依次输出对象中 stus 数组的值 --- 核心:自定义 Symbol.iterator方法
// 定义一个对象
const banji = {
name: '终极一班',
stus: [
'xiaoming',
'xiaotian',
'xiaowang',
'xiaohong'
],
// 添加 Symbol.iterator方法
[Symbol.iterator]() {
// 索引变量
let index = 0;
return {
next: () => {
if (index < this.stus.length) {
const result = { value: this.stus[index], done: false }
// 下标自增
index++;
// 返回结果
return result;
} else {
return { value: undefined, done: true }
}
}
}
}
}
// 打印自定义迭代器的内容
for (let k of banji) {
console.log(k);
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)