在工作当中循环数组总是用for,像是一种习惯,看别人的代码发现用map,forEach很多,于是打算做个总结。
const arr = ['1','2','3','4','5','6','7']
1.for循环
最基础的循环,在学循环语句的时候最先学的就是for循环,只是在用的时候有两点注意:
*长度要声明--因为如果不将长度缓存起来,每遍历一次就要获取一遍数组长度,性能不好;
*能减不加--因为计算机计算减法要比计算加法省力;
for (let i = 0,l = arr.length; i < l; i++){
//todo
}
for(let i = arr.length; i > 0; i--){
//todo
}
2.forEach循环
遍历数组的每一项,执行一个回调函数,将数组的每一项作为参数传递给回调函数,除此之外,函数还有两个参数:下标和原数组;注意以下几点:
*每遍历一次,函数就会执行一次;
*IE9以下不支持;
*不改变原数组;
*空数组不执行回调函数;
arr.forEach((item,index,array)=>{
//参数说明;item-数组的每一项,必选参数;index-下标,不必选参数;array-原数组,即这里的arr,不必选参数
//todo
})
在回调函数里执行return,就会停止执行此次函数,继续下一个回调函数,而不会停止整个循环,虽然可以执行return,但是并不能返回值
3.map循环
es6当中新出现的,语法和forEach一样,参数也一样,但是可以return返回值,即可以为数组中的某一项或多项赋值,并不改变原数组,相当于把原数组克隆一份,改变的是克隆数组中的值,注意事项和forEach也是一样,个人认为map比forEach好用。
let arrAdd = arr.map((item,index,array) => {
return +item + 1
})
console.log(arr,arrAdd)
4.for of 循环
可以循环数组,也可以循环字符串,官方文档给的是可以循环所有可迭代的对象,也就是说只要是可迭代的数据结构(Array,String,Map,Set等等)就可以用for of循环,终止循环可以用break,continue,return,throw;
for(let i of arr){
console.log(i)
}
注意:对象,我说的是普通的对象并不是可迭代数据结构,不能用for of循环。
5.for in 循环
常用来循环对象,普通的对象-object,当然也可以循环数组;
const object = {a:1,b:2}
for(let i in object){
console.log(i,object[i])
}
6.filter
翻译成中文是过滤器的意思,也就是过滤数组的每一项得到符合条件的新数组,不会改变原数组,语法和map一样。
let arrFilter = arr.filter((item) => {
return item >= 2
})
console.log(arrFilter)
以上就是常用的循环数组的方法,总结发现map用来返回值的,forEach用来处理但是不返回值的,filter是用来筛选的,这三个都是不能跳出循环的,当需要跳出循环的时候还是用for吧,而如果不需要跳出循环的时候就用map吧。