今天要總結(jié)的內(nèi)容是ES5中數(shù)組的新增方法银室,有forEach、map、filter蜈敢、find辜荠、every、some抓狭、reduce伯病,今天只總結(jié)使用,不研究原理否过,相關(guān)原理請(qǐng)百度午笛。因?yàn)樵谙旅胬又卸啻问褂昧思^函數(shù),如果對(duì)箭頭函數(shù)不了解需要先了解箭頭函數(shù)苗桂。
一药磺、forEach
題目:遍歷打印數(shù)組中的值
由圖中可得出,forEach的功能和for循環(huán)是一樣的煤伟,forEach的參數(shù)必須是函數(shù)癌佩,否則報(bào)錯(cuò),迭代函數(shù)的參數(shù)分別為:數(shù)組的值 colors[n]便锨,數(shù)組的下標(biāo) n围辙,數(shù)組 colors,用 forEach 打印 colors 結(jié)果如下圖
上面提到 forEach 的參數(shù)是個(gè)函數(shù)放案,所以 forEach 的參數(shù)是可以抽離出來(lái)一個(gè)函數(shù)表達(dá)式或者聲明一個(gè)函數(shù)姚建,因此上面代碼還可以寫成下面的方式
缺點(diǎn):普通的 for循環(huán),當(dāng)你循環(huán)至一定條件可使用 break 跳出循環(huán)吱殉,但 forEach 不能桥胞,forEach 是要一直循環(huán)到數(shù)組最后一個(gè)值,在 forEach 里使用 break考婴、continue 會(huì)報(bào)錯(cuò),使用return;默認(rèn)返回 undefined催烘。
使用場(chǎng)景:當(dāng)你想使用for循環(huán)來(lái)遍歷執(zhí)行某些事情時(shí)可使用 forEach
二沥阱、map
場(chǎng)景一:將數(shù)組 a 的每個(gè)值乘于2賦值給數(shù)組 b
場(chǎng)景一總結(jié):array.map 的參數(shù)也是個(gè)函數(shù),函數(shù)的參數(shù)值和 forEach 的一樣伊群,并且 array.map 的值是一個(gè)全新的數(shù)組考杉,且這個(gè)數(shù)組并不是使用了原來(lái)的位置,不管map有沒(méi)有改變數(shù)組的值舰始,map之后的數(shù)組和原來(lái)數(shù)組的內(nèi)存位置是兩個(gè)不同的內(nèi)存(下面詳解)崇棠。
上圖可看出,temp4 改變第0位時(shí)丸卷,numbers 的0位也改變了枕稀,因此可看出 temp4 只是淺拷貝了numbers2,和numbers2共用了一個(gè)內(nèi)存位置,而 temp5 在 在改變了0位時(shí)萎坷,numbers2 并沒(méi)有跟著改變凹联,因此可看出 temp5 和 numbers5 的內(nèi)存位置是不同的,因此可看出 map 是深拷貝(涉及深拷貝和淺拷貝哆档,不懂可點(diǎn)擊? 淺拷貝深拷貝之理解 個(gè)人筆記 )
使用場(chǎng)景:當(dāng)你想改變數(shù)組的某個(gè)值蔽挠,但又想保存原數(shù)組,可使用map重新定義一個(gè)數(shù)組(數(shù)組的值可變或不變)
三瓜浸、filter
場(chǎng)景:從動(dòng)物對(duì)象中篩選出老鼠類型的對(duì)象
圖中可看出澳淑,filter是篩選出所有type為老鼠的值,返回值也是一個(gè)數(shù)組插佛,參數(shù)也是個(gè)函數(shù)杠巡,函數(shù)的參數(shù)值和 forEach 的一樣。
使用場(chǎng)景:篩選某些值朗涩,或者抽離某些條件的值忽孽。
四、find
場(chǎng)景:獲取animals中的名字為Tom的動(dòng)物
從上圖結(jié)果可看出谢床,find是指返回一個(gè)值兄一,并且是第一個(gè)值,在循環(huán)查找到第一個(gè)值時(shí)就跳出循環(huán)识腿。如果find的值不在數(shù)組中出革,循環(huán)結(jié)束將返回結(jié)果值是undefined。
使用場(chǎng)景:篩選某些值渡讼,或者抽離某些條件的值骂束。
五、every 和 some
every和some的返回都是Boolean值成箫,every是一假為假展箱,some是一真為真。every循環(huán)時(shí)蹬昌,一旦查找到false將跳出循環(huán)混驰,而some則是一旦查找到true則跳出循環(huán)。
題目:查找數(shù)組a中type值存在于數(shù)組b中type值的對(duì)象(filter+some)
六皂贩、reduce
reduce的第一個(gè)參數(shù)是函數(shù)栖榨,函數(shù)的參數(shù)分別為 a,b,c,d,第二個(gè)參數(shù)是 a 的初始值明刷,如果沒(méi)有第二個(gè)參數(shù)婴栽,a默認(rèn)為0。reduce可替代forEach辈末,map愚争。
場(chǎng)景:累加數(shù)組的值
更多場(chǎng)景使用請(qǐng)看?http://www.reibang.com/p/56446e901438
總結(jié)映皆,forEach 、map 准脂、filter 返回值是一個(gè)數(shù)組劫扒,find 的返回值是數(shù)組中的一個(gè)值(對(duì)象或者基本類型)或 undefined ,every 和 some 的返回值 true 或 false 狸膏, reduce 的 返回值可以是數(shù)組沟饥,對(duì)象 或者 基本類型;而所有的方法的迭代函數(shù)中的參數(shù)都有數(shù)組的當(dāng)前值湾戳,數(shù)組的當(dāng)前下標(biāo)及數(shù)組贤旷,reduce除了這三個(gè)參數(shù),比其他數(shù)組還多一個(gè)參數(shù)砾脑;
學(xué)習(xí)資源:
? ? ? ? 視頻:米斯特吳的ES6_Javascript_最全最新講解 https://ke.qq.com/course/269571
? ? ? ? 書籍:阮一峰的ECMAScript 6 入門 http://es6.ruanyifeng.com/