Iterator迭代器
iterator迭代器
需要自定义遍历数据的时候,用到迭代器
主要供 for...of 消费
任何数据结构只要部署了 iterator 接口,就可以用 for...of 进行遍历操作。
iterator 实际上是对象中的一个属性(方法),名: Symbol.iterator
自带iterator的数据
原生具备 iterator 接口的数据(可用for...of遍历)
- Array
- Arguments
- Set
- Map
- String
- TypedArray
- NodeList
补充知识
例:for(let i of/in 数组/对象){}
/*
for of 遍历数组 i为数组中的元素
for of 遍历对象 报错
for in 遍历数组 i为索引值
for in 遍历对象 i为键名
*/
工作原理
- 创建一个只针对象,指向当前数据结构的起始位置
- 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
- 不断调用next方法,指针一直后移,直到指向最后一个成员
- next方法返回一个包含value和done属性的对象
如果想要for...of能遍历所有对象
// 给Object的原型对象prototype添加方法,方法名:Symbol.iterator
Object.prototype[Symbol.iterator] = function(){
let index = 0 //索引变量
let _this = this //保存当前this
let arr = Object.keys(this) //获取对象中所有属性名
return{ //指针对象
next:function(){
if(index < arr.length){
const result = {
value:_this[arr[index]], // _this[arr[index]]属性值,arr[index]属性名
done:false
}
}else{
return {value: undefined, done: true}
}
}
}
}
// ok现在就可以用for..of遍历对象了
let obj = {
name:'小明',
age:19,
sex:'男'
}
for(let i of obj){
console.log(i)
}
/*
结果:
小明
19
男
*/
本文来自博客园,作者:ycccc丶,转载请注明原文链接:https://www.cnblogs.com/imycc/p/16481099.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)