JavaScript 中的12种循环遍历方法【总结】


Posted in Javascript onMay 31, 2018

1、for 循环

let arr = [1,2,3];
for (let i=0; i<arr.length; i++){
 console.log(i,arr[i])
}
// 0 1
// 1 2
// 2 3

for 循环是 Js 中最常用的一个循环工具,经常用于数组的循环遍历。

2、for in 循环

let obj = {name:'zhou',age:'**'}
for(let i in obj){
 console.log(i,obj[i])
}
// name zhou
// age **

for in 循环主要用于遍历普通对象,i 代表对象的 key 值,obj[i] 代表对应的 value,当用它来遍历数组时候,多数情况下也能达到同样的效果,但是你不要这么做,这是有风险的,因为 i 输出为字符串形式,而不是数组需要的数字下标,这意味着在某些情况下,会发生字符串运算,导致数据错误,比如:'52'+1 = '521' 而不是我们需要的 53。

另外 for in 循环的时候,不仅遍历自身的属性,还会找到 prototype 上去,所以最好在循环体内加一个判断,就用 obj[i].hasOwnProperty(i),这样就避免遍历出太多不需要的属性。

3、while 循环

同样的遍历 cars 数组,先用 for 循环方法

let cars=["BMW","Volvo","Saab","Ford"];
let i=0;
for (;cars[i];)
{
console.log(cars[i])
i++;
};
// BMW
// Volvo
// Saab
// Ford

然后是 while 循环方法

cars=["BMW","Volvo","Saab","Ford"];
var i=0;
while (cars[i])
{
console.log(cars[i] + "<br>")
i++;
};

我们发现,它们可以实现同样的效果,事实上它们底层的处理是一样的,不过 for 循环可以把定义、条件判断、自增自减操作放到一个条件里执行,代码看起来方便一些,仅此而已。

4、do while 循环

let i = 3;
do{
 console.log(i)
 i--;
}
while(i>0)
// 3
// 2
// 1

do while 循环是 while 循环的一个变体,它首先执行一次操作,然后才进行条件判断,是 true 的话再继续执行操作,是 false 的话循环结束。

5、Array forEach 循环

let arr = [1,2,3];
arr.forEach(function(i,index){
 console.log(i,index)
})
// 1 0
// 2 1
// 3 2

forEach循环,循环数组中每一个元素并采取操作, 没有返回值, 可以不用知道数组长度,他有三个参数,只有第一个是必需的,代表当前下标下的 value。

另外请注意,forEach 循环在所有元素调用完毕之前是不能停止的,它没有 break 语句,如果你必须要停止,可以尝试 try catch 语句,就是在要强制退出的时候,抛出一个 error 给 catch 捕捉到,然后在 catch 里面 return,这样就能中止循环了,如果你经常用这个方法,最好自定义一个这样的 forEach 函数在你的库里。

6、Array map()方法

let arr = [1,2,3];
let tt = arr.map(function(i){
 console.log(i)
 return i*2;
})
// [2,4,6]

map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
注意:map 和 forEach 方法都是只能用来遍历数组,不能用来遍历普通对象。

7、Array filter() 方法

let arr = [1,2,3];
let tt = arr.filter(function(i){
 return i>1;
})
// [2,3]

filter 方法是 Array 对象内置方法,它会返回通过过滤的元素,不改变原来的数组。

8、Array some() 方法

let arr = [1,2,3];
let tt = arr.some(function(i){
 return i>1;
})
// true

some() 方法用于检测数组中的元素是否满足指定条件(函数提供),返回 boolean 值,不改变原数组。

9、Array every() 方法

let arr = [1,2,3];
let tt = arr.some(function(i){
 return i>1;
})
// 检测数组中元素是否都大于1
// false

every() 方法用于检测数组所有元素是否都符合指定条件(通过函数提供),返回 boolean 值,不改变原数组。

10、Array reduce()方法

let arr = [1,2,3];
let ad = arr.reduce(function(i,j){
 return i+j;
})
// 6

reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。

11、Array reduceRight()方法

let arr = [1,2,3];
let ad = arr.reduceRight(function(i,j){
 return i+j;
})
// 6

reduceRight()方法,和 reduce() 功能是一样的,它是从数组的末尾处向前开始计算。

12、for of 循环

let arr = ['name','age'];
for(let i of arr){
 console.log(i)
}
// name
// age

for of 循环是 Es6 中新增的语句,用来替代 for in 和 forEach,它允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代(Iterable data)的数据结构,注意它的兼容性。

总结

以上就是我总结的 Js 中常见的循环遍历方法,随着 Es6 标准的兼容性越来越好,我发现很多实现方案慢慢都不再必要了,比如 let、const 取代var 后,在某些情况下的闭包函数也就不存在了。

Javascript 相关文章推荐
js split 的用法和定义 js split分割字符串成数组的实例代码
May 13 Javascript
JS多物体 任意值 链式 缓冲运动
Aug 10 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
Mar 25 Javascript
dwz 如何去掉ajaxloading具体代码
May 22 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
JS实现仿Windows经典风格的选项卡Tab切换代码
Oct 20 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
Jan 18 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
vue cli 全面解析
Feb 28 Javascript
微信小程序自定义音乐进度条的实例代码
Aug 28 Javascript
vue实现设置载入动画和初始化页面动画效果
Oct 28 Javascript
vue修改Element的el-table样式的4种方法
Sep 17 Javascript
Vue 让元素抖动/摆动起来的实现代码
May 31 #Javascript
angular2路由之routerLinkActive指令【推荐】
May 30 #Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 #jQuery
Vue2.0 实现移动端图片上传功能
May 30 #Javascript
jQuery 导航自动跟随滚动的实现代码
May 30 #jQuery
Javascript获取某个月的天数
May 30 #Javascript
JS实现键值对遍历json数组功能示例
May 30 #Javascript
You might like
php桌面中心(四) 数据显示
2007/03/11 PHP
Mysql中limit的用法方法详解与注意事项
2008/04/19 PHP
使用PHP实现阻止用户上传成人照片或者裸照
2014/12/25 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
jquery.validate使用攻略 第一部
2010/07/01 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
bootstrap输入框组件使用方法详解
2017/01/19 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
Node.js原生api搭建web服务器的方法步骤
2019/02/15 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
vue-cli3自动消除console.log()的调试信息方式
2020/10/21 Javascript
[09:34]2018DOTA2国际邀请赛寻真——永不放弃的iG
2018/08/14 DOTA
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
用python记录运行pid,并在需要时kill掉它们的实例
2017/01/16 Python
python内置数据类型之列表操作
2018/11/12 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
python模块和包的应用BASE_PATH使用解析
2019/12/14 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
客服部工作职责范本
2014/02/14 职场文书
学习十八大报告感言
2014/02/28 职场文书
情人节寄语大全
2014/04/11 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
员工升职自荐信
2015/03/27 职场文书
2015年店长工作总结范文
2015/04/08 职场文书
退税申请报告怎么写
2015/05/18 职场文书
一篇文章弄懂Python中的内建函数
2021/08/07 Python
shell进度条追踪指令执行时间的场景分析
2022/06/16 Servers