下面我们需要遍历的数组 以arr=[1,2,3,4,5]为例
for循环
let arr = [1,2,3,4,5]
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]) //1,2,3,4,5
}
for (var i in arr) {
console.log(arr[i]) //1,2,3,4,5
}
arr.forEach((data) => {
console.log(data); //1,2,3,4,5
});
for (var i of arr) {
console.log(i) //1,2,3,4,5
}
for循环应该是最普遍的,使用最多的一种循环遍历方法了,所以也导致其可读性和易维护性比较差,但是它可以及时break出循环。
for...in循环主要针对于对象的遍历,当想要获取对象的对应键值时,使用for...in还是比较方便的
forEach的使用方法和map使用方法差不多,只是forEach方法不返回值,只用来操作数据,且循环中途是无法停止的,总是会将所有成员遍历完
ES6之前的 3 种 for 循环有什么缺陷:
forEach 不能 break 和 return; for-in 缺点更加明显,它不仅遍历数组中的元素,还会遍历自定义的属性,甚至原型链上的属性都被访问到。而且,遍历数组元素的顺序可能是随机的。
那 for-of 到底可以干什么呢?
跟 forEach 相比,可以正确响应 break, continue, return。 for-of 循环不仅支持数组,还支持大多数类数组对象,例如 DOM nodelist 对象。 for-of 循环也支持字符串遍历,它将字符串视为一系列 Unicode 字符来进行遍历。 for-of 也支持 Map 和 Set (两者均为 ES6 中新增的类型)对象遍历。
总结一下,for-of 循环有以下几个特征: 这是最简洁、最直接的遍历数组元素的语法。 这个方法避开了 for-in 循环的所有缺陷。 与 forEach 不同的是,它可以正确响应 break、continue 和 return 语句。 其不仅可以遍历数组,还可以遍历类数组对象和其他可迭代对象。 但需要注意的是,for-of循环不支持普通对象,但如果你想迭代一个对象的属性,你可以用 for-in 循环(这也是它的本职工作)。
map循环
let result = arr.map(function(item){
return item * 2
});
console.log(result) //2,4,6,8,10
console.log(arr) // 1,2,3,4,5
map()方法主要用来对数组中的元素调用函数进行处理,并且把处理结果放在一个新数组中返回,循环中途是无法停止的,总是会将所有成员遍历完(如果没有返回值,新数组中的每一个元素都为undefined)
filter过滤循环
let result = arr.filter((item,index)=>{
return item > 3
})
console.log(result) // 4,5
console.log(arr) // 1,2,3,4,5
filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。