ES6基礎(chǔ)入門教程(十一)遍歷對(duì)象

核心:


所有的循環(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。

返回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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容