核心:
所有的循環(huán)方法 都是為了脫離傳統(tǒng)的for循環(huán)的控制。原來(lái)的for循環(huán)實(shí)在是太low了。
1.forEach
作用:根據(jù)數(shù)組元素的個(gè)數(shù),循環(huán)一個(gè)函數(shù)。有兩種寫法。
理論上來(lái)說(shuō),這個(gè)循環(huán)就是用來(lái)遍歷數(shù)組中的值的。
第一種用法,
forEach只能對(duì)數(shù)組對(duì)象使用,如果你只傳一個(gè)function,function可以包含三個(gè)參數(shù),
第一個(gè)是下標(biāo),第二個(gè)是當(dāng)前循環(huán)的內(nèi)容,第三個(gè)是當(dāng)前數(shù)組
let arr=["laodang","laowang","laoma"]
arr.forEach((item,index,arr)=>{
console.log(item,index,arr);
})
第二種方法跟map循環(huán)遍歷非常相似。
// array.forEach(callback,[ thisObject])
// 第二種用法,循環(huán)往方法中注入?yún)?shù)并執(zhí)行
// 注意第一個(gè)參數(shù)為必須的函數(shù) 第二個(gè)參數(shù) 為你要注入第一個(gè)函數(shù)的數(shù)組
let arrObj={
user:["laodang","laowang","laozhang"],
fun:function(user){
console.log("hello:"+ user);
}
}
arrObj.user.forEach(arrObj.fun,arrObj.user)
// hello:laodang
// hello:laowang
// hello:laozhang
2.map
作用:根據(jù)數(shù)組元素的個(gè)數(shù),循環(huán)一個(gè)函數(shù)。有兩種寫法。
這個(gè)循環(huán)是用來(lái)對(duì)數(shù)組執(zhí)行方法的。
說(shuō)明:map循環(huán)跟forEach的第二種用法很相似,不同的是forEach是可以沒(méi)有return的值
但是map如果沒(méi)有,就會(huì)返回一個(gè)undefined。

這里注意,你應(yīng)該使用一個(gè)對(duì)象去接收return出來(lái)的值。
因?yàn)閙ap不會(huì)改變?cè)瓉?lái)的數(shù)組,會(huì)生成一個(gè)新的數(shù)組。
//array.map(callback,[ thisObject]);
//item就是當(dāng)前循環(huán)的內(nèi)容
let arr=[1,"laohu",3,8]
let fun =arr.map((item)=>{
return "hello:"+item;
})
console.log(fun);
3.filter
filter用于過(guò)濾數(shù)據(jù)。會(huì)返回一個(gè)新數(shù)組。
這個(gè)循環(huán)是用來(lái)對(duì)數(shù)組進(jìn)行過(guò)濾的。
//filter 會(huì)過(guò)濾掉不符合條件的數(shù)據(jù) 然后生成一個(gè)新的數(shù)組
//array.filter(callback,[ thisObject]); 也可以跟forEach第二種用法一樣
let arr=[1,2,3,4]
let newArr = arr.filter((item)=>{
return item>2;
})
console.log(newArr);
4.reduce
疊加或者疊減數(shù)組中的每一項(xiàng),(會(huì)返回最終計(jì)算的值)。
其實(shí)它還有一個(gè)兄弟函數(shù)reduceRight,它本身是從左往右加,那個(gè)是順序反過(guò)來(lái),但是實(shí)際意義不太大。
這個(gè)循環(huán)是用來(lái)對(duì)數(shù)據(jù)進(jìn)行疊加 疊減的。
//reduce 疊加/疊減函數(shù)
let arr = [1,2,3,4,5]
// 第一個(gè)參數(shù)是本次的值,第二個(gè)是下一次加的值
// 跟sort函數(shù)有點(diǎn)像
let Newarr=arr.reduce((benci,xiaci)=>{
console.log(benci);
return benci+xiaci
})
console.log(Newarr);
// 15
// 這個(gè)方法還可以設(shè)置一個(gè)初始的值 相當(dāng)于從5開(kāi)始加
// 相當(dāng)于數(shù)組變成了[5,1,2,3,4,5] 相加
let Newarr2=arr.reduce((benci,xiaci)=>{
return benci+xiaci
},5)
console.log(Newarr);
//20
特殊操作:獲取額度最高的優(yōu)惠券
你要注意,只有這個(gè)循環(huán)是返回一個(gè)值,而不是返回?cái)?shù)組,我們利用它這個(gè)原理
可以做一個(gè)操作,那就是例如:獲取優(yōu)惠券中額度最高的那張
let quan=[
{"id":"10001","name":"優(yōu)惠券1","qian":1000},
{"id":"10002","name":"優(yōu)惠券2","qian":900}
]
let keyongquan = quan.reduce((a,b)=>{
return b.qian > a.qian ? {"id":b.id,"qian":b.qian} : {"id":a.id,"qian":a.qian};
})
// 直接返回額度最高的那張券 返回一個(gè)對(duì)象
console.log(keyongquan);
5.some
用于查看數(shù)組中是否包含某個(gè)值,返回true
循環(huán)遍歷,如果數(shù)組中包含有符合條件的值,結(jié)束循環(huán),并且返回一個(gè)true。
這個(gè)循環(huán)是用來(lái)檢查數(shù)組是是否包含數(shù)據(jù)的。
// 通常用來(lái)查看數(shù)組中是否包含某個(gè)值
let arr=[1,2,3,4,5]
// some 只要循環(huán)中出現(xiàn)一個(gè)符合條件的 就停止循環(huán)
// 最后返回一個(gè)true
console.log(arr.some((val,index,arr)=>{
console.log(val);
return val>2
}))
6.every
用于查看數(shù)組中是否包含某個(gè)值,
如果每一項(xiàng)都符合條件,最后返回一個(gè)true;
如果有一項(xiàng)不符合,結(jié)束循環(huán),返回false
這個(gè)循環(huán)是用來(lái)檢查數(shù)組是是否包含數(shù)據(jù)的。
let arr=[1,2,3,4,5]
console.log(arr.every((val,index,arr)=>{
console.log(val);
return val>2
}))
// 1
// fales