摘要:如上图所示,本文主要阐述了的四种迭代器,,和的功能和区别动态数组每次遍历开始时都会重新计算一次数组的长度稀疏数组不会跳过无效数组动态数组与一样,会遍历到新增加的元素稀疏数组也不会跳过无效数组特点可以遍历字符串可以遍历类数组对象对象可
如上图所示,本文主要阐述了Array的四种迭代器 for,for-of,for-in 和 for-each的功能和区别
for动态数组:每次遍历开始时都会重新计算一次数组的长度
稀疏数组:不会跳过无效数组
for-of动态数组:与for一样,会遍历到新增加的元素
稀疏数组:也不会跳过无效数组
特点:
1、可以遍历字符串
2、可以遍历类数组对象:DOM;NodeList对象
3、可以遍历数组中的值
4、可以遍历set,map对象
注释:
set
定义:用来不重复的存储任何数据类型的对象,不管是基本的数据类型还是对象
使用 new Set(array)
map:
定义:用来存储键值对象的数据
使用: new Map([iterable])参数是一个数组或者是由键值对组成的可遍历对象
测试
/**可以遍历字符串 */ const strTarget = "hello"; for(item of strTarget){ console.log(item); }
结果:
/**遍历DOM元素*/ const pdom = document.getElementsByTagName("p"); for( item of pdom){ console.log(item); }
结果:
/**遍历数组中的值 */ const arr = ["liumin","qijun","fengjian","lala"]; for(item of arr){ console.log(item); }
结果:
/**遍历set和map中的值 */ const setObj = new Set([1,2,2,3,5,6]); for(value of setObj){ console.log(value); } const mapObj = new Map([["a",1],["b",2]]); for([key, value] of mapObj){ console.log(`${key}----${value}`); }
遍历set的输出值:
遍历map的输出值:
动态数组:不会遍历到新增加的元素
稀疏数组:会跳过无效数组
特点:不能用break和return来中断循环
for-in动态数组:不会遍历到新增加的元素
稀疏数组:会跳过无效数组
特点:
1、for-in是为对象的遍历而设计的,index不是实际数字,而是键字符串,与Object.keys()方法类似
2、给数组额外定义一个属性,会遍历到这个属性和值
3、遍历顺序有时也是随机的
4、数组原型链上的属性也会被访问到
给数组额外定义一个属性,for-in会遍历到这个属性值,forEach,for-of,for都不会遍历到这个属性值
测试
const anotherArr = ["huang", "lala", "baba"]; const array = ["iumin", "huahua", "jianjian"]; array.another = anotherArr; console.log("----for-in----"); for(let index in array){ console.log(`${index}---${array[index]}`); } console.log("----for-of---"); for(let value of array){ console.log(value); } console.log("----forEach----"); array.forEach((value) => { console.log(value); }) console.log("----for-----"); const arLenght = array.length; for(let i=0 ; i稀疏数组
由图可以看出除了for-in其他三个都不会遍历到数组额外定义的属性for-in和forEach会跳过无效数组
测试const arr = []; arr[0] = 0; arr[100] = 100; arr[1000] = 1000; for(info in arr){ console.log("arr["+info+"] = "+arr[info]); } arr.forEach((value) => { console.log(value); })
由结果可以看出,for-in 和 foreach 只能输出赋过值的元素,没有赋过值的元素将不会输出来
for 和 for-of是不会跳过无效数组的const arr = []; arr[0] = 0; arr[100] = 100; arr[1000] = 1000; for(let info of arr){ console.log(info); } for(let i=0; i这两个的输出结果是一样的:
动态数组
可以看出把没有赋值的元素也输出出来了for-of 和 for 可以遍历到新增加的元素
测试(以for-of为例):const arr = ["liumin","huahua","jianjian"]; for(item of arr){ if(item === "jianjian"){ arr.push("hello"); } console.log(item); }输出结果:
for的输出结果与上述一致for-in 和 forEach 不可以遍历到新增加的元素
测试(以 for-in为例):const arr = ["liumin","huahua","jianjian"]; for(item in arr){ if(item === 2){ arr.push("hello"); } console.log(arr[item]); }输出结果:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/93139.html
摘要:什么是可迭代对象可迭代对象具有属性是一个方法的返回值是一个迭代器结合以上第二点和第三点,可以得出就是一个生成器所以我们可以给出一个可迭代对象的明确定义就是一个具有属性,且其为一个生成器的对象,就是可迭代对象。 1: 什么是可迭代对象? 1: 可迭代对象具有Symbol.iterator属性 2: Symbol.iterator是一个方法 3: Symbol.iterator的返回值是一...
摘要:将数组或者集合中的全部或者一部数据取出来,用迭代器比较方便迭代器能陆续遍历几个迭代器按顺序迭代访问几个不同的迭代器。 一、SPL简介 什么是SPL PHP的标准库SPL:Standard PHP Library SPL: 用于解决常见普遍问题的一组接口与类的集合 Common Problem: 数学建模/数据结构 解决数据怎么存储的问题 元素遍历 ...
摘要:本文从使用对数组进行遍历开始说起,粗略对比使用进行遍历的差异,并由此引入中可迭代对象迭代器的概念,并对其进行粗略介绍。说到这里,就继续说一下迭代器关闭的情况了。确实,符合可迭代协议和迭代器协议的。 本文从使用 forEach 对数组进行遍历开始说起,粗略对比使用 forEach , for...in , for...of 进行遍历的差异,并由此引入 ES6 中 可迭代对象/迭代器 的概...
摘要:迭代器模式迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。可迭代协议和迭代器协议。生成器函数是可以作为迭代器工厂的函数,当它被执行时会返回一个新的对象,该对象符合可迭代协议和迭代器协议。 迭代器模式 迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。 迭代器分为内部迭代器和外部迭代器。内部迭代器只需一次初...
摘要:我们将从概念上理解迭代器是什么,以及在何处使用它们和示例。同时返回一个名为迭代器的对象,这个迭代器将拥有一个名为的方法,该方法将返回一个具有键值为和的对象。下图可以帮助建立可迭代对象迭代器和之间的关系,这种关系称为迭代协议。 showImg(https://segmentfault.com/img/bVbkk18?w=1000&h=562); 我们将在本文中分析迭代器。迭代器是在Jav...
阅读 2858·2021-11-15 11:39
阅读 1491·2021-08-19 10:56
阅读 1069·2019-08-30 14:12
阅读 3664·2019-08-29 17:29
阅读 657·2019-08-29 16:21
阅读 3400·2019-08-26 12:22
阅读 1495·2019-08-23 16:30
阅读 990·2019-08-23 15:25