本文原链接:https://cloud.tencent.com/developer/article/1360074

for of 和 for in 循环

循环遍历数组的时候,你还在用 for 语句走天下吗?

我曾经就是 for 走天下,最后发现自己给自己挖了一个巨大的坑,层层嵌套的循环,总要花大量的时间去捋清各种逻辑关系,很容易逻辑混乱。终于你经过千辛万苦把逻辑捋清了,实现了功能需求。可是这时候接踵而来的问题来了?性能,扩展性,重用性....等等,合着我费了九牛二虎之力白费了。这时候一把鼻涕一把泪,满是辛酸;

后来就很少很少使用 for 取而代之的是 APIES6 的一些新特性

数组的 for of

一说到循环我们很容易想到 for in,但是我们应该要知道的是 他更适合用来遍历对象而不是数组,有人说他是为遍历普通对象而设计的。

理由:

for in 遍历是随机的,数组遍历是按照一定顺序的。

for in 遍历数组索引的时候可能得到的是字符串索引而不是数字索引,而我们希望数组遍历是数字索引遍历(除了关联数组之外)

for ... in循环由于历史遗留问题,它遍历的实际上是对象的属性名称。一个Array数组实际上也是一个对象,它的每个元素的索引被视为一个属性。

循环我们也很容易想到 forEach()方法

        array.forEach(callback(currentValue, index, array){
//do something
}, this)
复制代码

参数

callback: 为数组中每个元素执行的函数,该函数接收三个参数:

currentValue(当前值): 数组中正在处理的当前元素。

index(索引): 数组中正在处理的当前元素的索引。

array: forEach()方法正在操作的数组。

thisArg可选:可选参数。当执行回调 函数时用作cthis的值(参考对象)。

返回值:undefined 局限: 不能使用 break 中断循环,也不能使用 return 语句返回到外层函数

此刻我想像你推荐 for...of 循环,你的不二之选

for of遍历数组应该是最好的选择,最简洁、最直接的遍历数组元素的语法,可以使用breakcontinuereturn 语句,同时他避开了 for in循环的缺陷

for-of 循环不仅支持数组,还支持大多数类数组对象,for-of 循环也支持字符串遍历。

我们可以把字符串假象成数组的一种,字符串有的方法数组都有,它同样支持 MapSet 对象遍历。简而言之就是有迭代器方法的都可以用for of循环(如果你还不知道MapSet我们可以开始他们的学习路程了)

再来说一说数组其他遍历的API

    const new_array = arr.filter(callback[, thisArg])
复制代码

callback :用来测试数组的每个元素的函数。调用时使用参数 (element, index, array)。返回 true 表示保留该元素(通过测试),false 则不保留。

thisArg :可选。执行 callback 时的用于 this 的值。

返回值:一个新的通过测试的元素的集合的数组

  • Array.prototype.map(): 创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
    let new_array = arr.map(function callback(currentValue, index, array) {
// Return element for new_array
}[, thisArg])
复制代码

callback : 生成新数组元素的函数,使用三个参数:

currentValue : callback 的第一个参数,数组中正在处理的当前元素。

index :callback 的第二个参数,数组中正在处理的当前元素的索引。

array: callback 的第三个参数,map 方法被调用的数组。

ound: #eee;">thisArg:可选的。执行 callback 函数时 使用的this 值。

  • Array.prototype.every(): 如果数组中的每个元素都满足测试函数,则返回 true,否则返回 false
  • Array.prototype.some(): 如果数组中至少有一个元素满足测试函数,则返回 true,否则返回 false

for...in、for...of、forEach()有什么区别的更多相关文章

  1. 关于js中for in和foreach in的区别

    js 中for in 和foreach in的区别 两个的作用都用来遍历对象,但为什么有了for in语句了还要foreach in语句呢,后来看了下foreach in开发的文档,foreach i ...

  2. java 中,for、for-each、iterator 区别

    java 中,for.for-each.iterator 区别: 无论是在数组中还是在集合中,for-Each加强型for循环都是它们各自的普通for循环的一种"简写方式",即两者 ...

  3. js之for与forEach循环的区别

    回武汉打卡第四天,武汉加油,逆战必胜!今天咱们探讨一下for循环和forEach()循环的区别. 首先,for循环在最开始执行循环的时候,会建立一个循环变量i,之后每次循环都是操作这个变量,也就是说它 ...

  4. for循环,for…in循环,forEach循环的区别

    for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 } ...

  5. for, for in, for of, map, forEach 循环的区别:

    for, for in,  for of, map, forEach 循环的区别: for  遍历数组: //对象遍历数组 var arr = [ {Monday: '星期一', Tuesday: ' ...

  6. for、foreach和Iterator区别及ConcurrentModificationException异常

    (问:1.for.foreach和Iterator遍历有什么区别    2.遍历删除ConcurrentModificationException异常.) 1.在形式上 for的形式是 for(int ...

  7. js中 forEach 和 map 区别

    共同点: 1.都是循环遍历数组中的每一项. 2.forEach()和map()里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名函数中 ...

  8. every、some、filter、map、forEach 方法的区别总结

    API功能描述: [every]:Boolean 遍历数组并执行回调,如果每个数组元素都能通过回调函数的测试则返回true,否则返回false.一旦返回false,将立即终止循环. [some]:Bo ...

  9. JS中some(),every(),forEach(),map(),filter()区别

    JS在1.6中为Array新增了几个方法map(),filter(),some(),every(),forEach(),也就是一共有这么多方法了. 刚开始接触这些倒也记得不是很清楚,在此纪录一下以加深 ...

随机推荐

  1. ABP 软删除ISoftDelete

    一.简介 ABP 的软删除是为了,在删除的时候,不是真正的删除数据,是为了保护数据. 二.具体实现 在 Core  层,我们需要这个实体去实现这个 ISoftDelete 接口.实现它的 public ...

  2. java反射机制基础总结

    1反射机制是啥? 反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的进行改变.通俗的讲就是反射可以在运行时根据指定的类名获得类的信息. 2反射机制有啥用? Reflection(反射) ...

  3. MySQL学习中,遇到的问题记录

    一.安装mysql时,报错:1045 原因:因为之前安装过mysql,之后再安装会出现这个问题. 解决: 删除之前的残留就好了 方法:清除mysql之前的历史残留

  4. JS 上拉加载

    $(document).ready( function(){ $contentLoadTriggered = false; $("#mainDiv").scroll(functio ...

  5. SpringBoot2.0 基础案例(03):配置系统全局异常映射处理

    一.异常分类 这里的异常分类从系统处理异常的角度看,主要分类两类:业务异常和系统异常. 1.业务异常 业务异常主要是一些可预见性异常,处理业务异常,用来提示用户的操作,提高系统的可操作性. 常见的业务 ...

  6. 这几道Python面试题,稳准狠,Python面试题No15

    必须放一个表情包,太魔性了! 第1题: 修改以下Python代码,使得下面的代码调用类A的show方法? 原始代码 class A(object): def run(self): print(&quo ...

  7. 洛咕11月月赛部分题解 By cellur925

    听说是你谷史上最水月赛?我不听我最菜 T1:终于结束的起点 月天歌名好评 给你一个模数 \(M\),请你求出最小的 \(n > 0\),使得\(fib(n)\) \(mod\) \(m=0\), ...

  8. sql server添加sa用户和密码

    昨天给网站“搬家”(更换服务器),我是在win7上安装的 sql server2012,安装过程很顺利,用“Windows 身份验证” 也可正常访问.但是用sa用户访问数据库出现了 错误:18456. ...

  9. java基础第十一篇之Date、Math、自动装箱和拆箱

    Date类 表示一个瞬间,就是一个时刻 * * 构造方法: * public Date();//创建一个表示当前系统时间的Date对象 * public Date(long time);//毫秒值,距 ...

  10. php输出变量加{}的作用

    之前在输出字符串中有变量如 echo “中间有”; echo $i; echo "变量"; 现在发现一个好方法,把变量用{}括起来 echo "中间有{$i}变量&quo ...