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 相关文章推荐
jQuery源码分析-03构造jQuery对象-工具函数
Nov 14 Javascript
node.js中的socket.io入门实例
Apr 26 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
Aug 05 Javascript
学习Angular中作用域需要注意的坑
Aug 17 Javascript
JavaScript正则表达式函数总结(常用)
Feb 22 Javascript
手把手教你用Node.js爬虫爬取网站数据的方法
Jul 05 Javascript
vue单页面应用打开新窗口显示跳转页面的实例
Sep 21 Javascript
Jquery获取radio选中值实例总结
Jan 17 jQuery
原生js实现的移动端可拖动进度条插件功能详解
Aug 15 Javascript
Vue混入mixins滚动触底的方法
Nov 22 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 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
DC《神奇女侠2》因疫情推迟上映 温子仁新恐怖片《恶性》撤档
2020/04/09 欧美动漫
php实现网站插件机制的方法
2009/11/10 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
PHP进阶学习之依赖注入与Ioc容器详解
2019/06/19 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
JavaScript实现点击按钮后变灰避免多次重复提交
2013/07/15 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
2015/06/25 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
基于js对象,操作属性、方法详解
2016/08/11 Javascript
JavaScript中Array对象用法实例总结
2016/11/29 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
详细分析React 表单与事件
2020/07/08 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python selenium 三种等待方式详解(必会)
2016/09/15 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
python 请求服务器的实现代码(http请求和https请求)
2018/05/25 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python print 格式化输出,动态指定长度的实现
2020/04/12 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python能开发游戏吗
2020/06/11 Python
html5中嵌入视频自动播放的问题解决
2020/05/25 HTML / CSS
开办加工厂创业计划书
2014/01/03 职场文书
运动会通讯稿500字
2014/02/20 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
初中军训感想300字
2014/03/05 职场文书
责任书范本
2014/08/25 职场文书
爱的教育观后感
2015/06/17 职场文书
简历自我评价范文
2019/04/24 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
一次MySQL启动导致的事故实战记录
2021/09/15 MySQL
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS