使用 for of 自定义遍历对象

for...of 循环:遍历对象的完美解决方案 可迭代对象是指实现了 @@iterator 方法的对象,该方法返回一个迭代器对象。of 循环在每次迭代时调用迭代器对象的 next() 方法,直到迭代器返回一个表示结束的特殊值(如 { done: true })为止。它提供了一种简洁而直观的方式来迭代数组、字符串、Set、Map 等可迭代对象的元素,使得在前端开发中处理数据集合变得更加便捷。除了遍历内置的可迭代对象,我们还可以通过实现自定义的迭代器来使用 for…of 循环简化了遍历可迭代对象的过程,无需显式地操作索引或使用迭代器方法。 阅读详情

   obj用for of 原理:for...of...的使用需要对象有一个遍历器 模仿能用forfo的对象的[symbol.iterator]

打印一下数组的结构:


可以看到我们遍历时使用的 keys entries 方法,values 方法在下面截图不够长,再进一步看查看entries方法

entries中只有一个next方法,调用next返回一个对象 其中两个值 done 和 value 

terator的遍历过程是这样的:

(1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

(2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

(3)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

(4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。

每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

知道了原理我们就可以编写一个类似的遍历器在 对象上,然后就可以通过 for of 遍历对象

let obj={
    name:'AA',
    age:18,
    say:function(){console.log(1);},
    [Symbol.iterator]:function(){
        let index=0
        // console.log(this);
        let list=Object.keys(this)
        return {next:()=>{
            let value={
                key:list[index],
                value:this[list[index]]
            }
            let done
            if(index>=list.length){
                done=true
            }else{
                done=false
            }
            index++
            return{done,value}
        }}
    }
}
for (let v of obj){
    console.log(v);
}
for (let v of Object.keys(obj)){
    console.log(v);
}

 this的指向很重要,还有就是 done 是不能修改的,但是 value 可以,比如我返回的value是一个对象其中有 当前项的 索引index 和 值value

Python实现微信PC端聊天记录自动化监听与智能回复 本文详细介绍了如何使用Python实现微信PC端聊天记录的自动化监听与智能回复。通过win32api和uiautomation库,模拟人工操作,实时监控聊天窗口并抓取新消息。文章重点讲解了核心代码逻辑、环境搭建步骤,并提供了实现关键词触发自动回复的完整方案,旨在提高工作效率与信息管理自动化水平。 阅读详情

相关推荐

SWD下载调试接口原理深度剖析

作为ARM嵌入式工程师,下载调试器都应该知道,但你真正了解SWD如何下载调试的么?ARM 芯片通过什么物理接口和什么方式连接完全取决于芯片Debug子系统的架构如何?

zhuwade的博客 1万+

68、对Object进行原型编程,使任意实例能够被for...of遍历

// 对Object进行原型编程 Object.prototype[Symbol.iterator] = function* () { let index = 0; let arr = Object.entries(this); let length = arr.length; while (true) { if (index >= length) { return false } else { let ke.

sunnnnh的博客 629

基于ST32 DAC7311数模转换器驱动代码及电路设计完整版

基于ST32的DAC7311模数转换器的电路设计及驱动代码完整版

qq_39626643的博客 3708

JS中让对象支持for...of遍历

1.for…of的工作原理 for…of 循环首先会向被访问对象请求一个迭代器对象,然后通过调用迭代器对象的next() 方法来遍历所有返回值。 数组可以直接使用for…of遍历是因为数组内置了迭代器 2.让对象支持for…of 让对象支持for…of的办法就是手动给对象添加迭代器 var myObject = { a: 1, b: 2, c: 3 }; //写法一:简单写法 myObject[Symbol.iterator] = function(){ const _this = t

_ 5336

Cadence画PCB的傻瓜式教程

1.原理图1)建立元件库2)建立原理图3)在原理图中画好电路图4)利用MENTOR-GRAPHICS-IPC-7351-LP-VIEWER查看元件的封装信息,用pad designer画焊盘,用pcb editor画元件的封装(对照LP_VIEWER),(也可以使用package wizard)5)在原理图中为元件添加封装信息(键入)6)Drc检查7)生成网表2.Pcb1)设置...

tianpu2320959696的博客 1万+

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

100天精通Python(爬虫篇)——第122天:基于selenium接管已启动的浏览器(反反爬策略)

努力让自己发光,对的人才能迎着光而来 13万+

for...in for...of遍历对象的四种方式

首先最简单的ES 5的for in遍历对象 let a={ a:100, b:200 } for(let key in a) console.log(key,a[key]) for+Object.keys()方法遍历对象 let a={ a:100, b:200 } for(let key of Object(a)) console.log(key,a[key]) for of+Object.entries()方法返回一个给定对象自身可枚举属性的键

peifeng_chen的微博 4759

【AI黑话日日新】什么是AI Infra?

是支撑AI模型开发、训练、推理、部署与规模化运营的,是连接底层算力与上层AI应用的“数字基建”。没有高效的AI Infra,大模型训练、推理与落地都无法高效实现。

专注:太空算力、AI infra、异构调度、大模型成本工程 1073

js中如何使用for..of来遍历对象?

for …of是ES6新增的遍历方式,用于遍历数组和对象的。for…of是允许遍历一个含有Iterator接口的数据结构(对象、数组等)并且返回各项值。普通对象是无法遍历的。

fangqi20170515的博客 4638

Open3D点云数据处理(五):点云、mesh可视化(draw_geometries方法)

本文介绍了Open3D中的draw_geometries可视化方法,可以用于可视化点云和mesh。详细讲述了该方法的各个参数的作用,给出了代码示例。

孙悟空 3132

二维光子晶体禁带的遗传优化算法实现

二维光子晶体禁带的遗传优化算法MATLAB源代码 光子晶体中因周期性结构而存在的频率禁带称为光子禁带,光子禁带的存在是光子晶体具有广泛应用前景的重要原因。 禁带越大,可控光的频带也越宽,因此如何设计合适的晶体结构以获得大的光子禁带一直是研究和应用的重点与热点。 给大家讲解在平面波展开法的基础上,使用遗传算法寻找具有最大光子禁带的二维光子晶体结构。 %-------------------------------------------------------------------------- % Ph

m0_53407570的博客 578

JavaScript基础学习-ES6 for of

JavaScript基础学习-ES6 for of数组对象 数组 es6数组可以使用for of变量,数组内置@@iterator,for of循环首先会向被访问对象请求一个迭代器对象,然后通过迭代器对象的next()方法变量所有返回值 var array = [1, 2, 3]; for (const iterator of array) { console.log('for...

宋大王的博客 261

Python爬虫实战:高效爬取法律法规数据库的完整指南

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的法律法规数据库爬虫。我们将从爬虫的基本原理讲起,逐步深入到反爬机制应对、数据解析与存储、性能优化等高级话题。文章包含完整的代码实现,使用requests-html、aiohttp等现代库,以及应对法律数据库特殊结构的处理技巧。通过本文,您将掌握构建专业级法律数据采集系统的全套技能。关键词:Python爬虫、法律法规、数据采集、异步爬虫、反反爬本文详细介绍了使用Python爬取法律法规数据库的完整技术方案。

2201_76125261的博客 1270

for in 与for of循环的区别

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

Alex的博客 3621

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

循环结构(for/in 语句、for/of语句以及for of与for in 区别)

循环结构(for/in 语句、for/of语句以及for of与for in 区别)

m0_71814235的博客 1212

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

JS中是如何使用for..of来遍历对象

JS中是如何使用for..of来遍历对象的

weixin_46051260的博客 1880

for...of 可以直接遍历普通对象嘛

摘要: JavaScript 的 for...of 不能直接遍历普通对象(Object),因为对象默认不可迭代(无 [Symbol.iterator] 方法)。可迭代对象包括数组、字符串、Map/Set 等。若需遍历对象,可通过 Object.keys()/values()/entries() 转换后循环,或手动实现 [Symbol.iterator]。相比 for...in(遍历键),for...of 更适合处理可迭代结构的元素值。 关键点: 1️⃣ for...of 需可迭代对象,普通对象不适用 2️⃣

前端小白的博客 407

for-in与 for-of有什么区别

1.遍历数组角度 2.遍历对象角度

qq_41396714的博客 536

ES6补充篇-for of + iterator

前言 本文主要是补充一些遗漏的知识点,望大家批评指教 1、for of循环方式 在ES6提供了一种新的遍历数据结构的方式 for of 这种循环方式会作为以后遍历所有的数据结构的统一方式 for of示例如下 1、遍历数组 let arr = ['first', 'second', 'third', 'four']; for (const num of arr) { console.log(num); } result => first result => second .

往事不回头,余生不将就 6953

for of和遍历器

1. for of的工作原理 for…of 循环首先会向被访问对象请求一个迭代器对象,然后通过调用迭代器对象(iterator)的next() 方法来遍历所有返回值。 2. 可以用for of遍历的对象 数组、字符串、arguments、set容器、map容器 3. 模拟实现Symbol.iterator接口进行遍历对象 4. 使用Generator函数模拟实现Symbol.iterator接口

lseap的博客 342

遍历对象属性_遍历器Iterator

▲ 点击上方蓝字关注我▲文 / 景朝霞来源公号 / 朝霞的光影笔记ID / zhaoxiajingjing目录:0 / Iterator1 / 实现Iterator2 / 给object上实现iterator(1)借用别人的(2)自己写一个(3)遍历奇数索引3 / 小结0 / Iterator△ 图1_在web浏览器中是没有Iterator这个类的在web浏览器中没有Iterator这...

weixin_34627088的博客 267

ES6 for of 的使用

ES6 for of 的使用 一、for of多用于循环遍历数组,因为他能直接获取数组每位的值,而不是像for in一样先获取索引再获取值 let arr = ['a','b','c']; for(let item in arr){ console.log(item);//a b c } 二、for of 不能直接遍历对象,但通过手动实现迭代器接口是可以的 该例子来自ES6系列教程第二篇–Iterator 详解 var obj={ 0:"rrr", 1:"444", //实

wallace_yang的博客 369

有关遍历的那些事(for..of原理讲解)

//用来简写console.log function c(content) { console.log(content) } //遍历 var arr = [1, 2, 3, 4, 5] var obj = { 'name': 'xiaoli', 'age': 12 } //几种遍历方式 //数组遍历,除了常规的for 循环 // ES6新增的数组迭代器 arr.forEach(function(item) { console.log(item) }) //判断数组中是否

qq_38428839的博客 378

for...of的理解与使用

for…of语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句 举例子: const array1 = ['a', 'b', 'c']; for (const element of array1) { console.log(element); } // expected output: "a" // expected output: "b" // expected

Yetian_2000的博客 499

for in 和 for of 区别

for in 和 for of 区别

yinyueyu007的博客 445

for in 和 for of的区别详解

for in 和 for of的区别详解 for in 和 for of 相对于大家肯定都不陌生,都是用来遍历属性的没错。那么先看下面的一个例子: 例1 const obj = { a: 1, b: 2, c: 3 } for (let i in obj) { console.log(i) // a // b // c } for (let i of obj

weixin_45346719的博客 188

for in 和for of的区别

1 如果单纯的是数组 var arr = ['zs','ls','lhx'] for(var item of arr){ console.log(item) // zs,ls,lhx } var arr = ['zs','ls','lhx'] for(var key in arr){ console.log(key) //0,1,2 } 总结:for of 是遍历的数组的值 。for in遍历的是数组的索引 2 如果是数组对象 var arr =

L_csdn123的博客 336
上一篇: vant3 list 的坑
下一篇: el-tbale 合计行中使用 自定义dom || tooltip交互
paidaboluo
博客等级 码龄6年 13粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值