大家好,我是IT修真院深圳分院第02期學(xué)員孫劍立,一枚正直善良的web程序員。
今天給大家分享一下,修真院官網(wǎng)JS任務(wù)4中對一個數(shù)組 FILTER、SOME、MAP、FOREACH的操作分別有什么作用?
1.背景介紹
使用JavaScript數(shù)組常常需要對數(shù)組進(jìn)行遍歷、迭代操作。而我們常用的就是for語句對數(shù)組進(jìn)行迭代。然而在ECMAscript5已經(jīng)為數(shù)組定義了5個迭代的方法,分別是:filter、some、map、foreach、every,下面我們講講它們的具體作用
2.知識剖析
every(): 對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對每一項都返回true,則返回true ;
some(): 對數(shù)組中的每一項運行給定函數(shù),如果該函數(shù)對任一項返回true,則返回true;
通過 demo,我們了解到對于 every() ,它返回的是false,因為存在不符合條件的值。
而對于some() ,結(jié)果就為true,因為至少存在一項符合條件的值;
filter(): 對數(shù)組中的每一項運行給定函數(shù),返回該函數(shù)會返回true的項組成的數(shù)組。
通過調(diào)用 filter() 創(chuàng)建并返回了包含符合條件的數(shù)組,因為傳入的函數(shù)對他們每一項都返回true。這個方法對查詢符合某些條件的所有數(shù)組項非常有用。
map():對數(shù)組中的每一項運行給定函數(shù),返回每次函數(shù)調(diào)用的結(jié)果組成的數(shù)組。
map()也返回一個數(shù)組,而這個數(shù)組的每一項都是在原始數(shù)組中的對應(yīng)項上運行傳入函數(shù)的結(jié)果;
forEach():對數(shù)組中的每一項運行給定函數(shù),這個方法并沒有返回值 ;
通過demo可以看出 forEach() ,只是對每個數(shù)組項運行指定的函數(shù)體,這個迭代方式并沒有返回值,本質(zhì)上與使用for循環(huán)迭代數(shù)組一樣
3.常見問題
迭代和遍歷、循環(huán)、遞歸有什么區(qū)別?
4.解決方案
循環(huán)(loop),指的是在滿足條件的情況下,重復(fù)執(zhí)行同一段代碼。比如,while語句。
迭代(iterate),指的是按照某種順序逐個訪問列表中的每一項。比如,for語句。
遍歷(traversal),指的是按照一定的規(guī)則訪問樹形結(jié)構(gòu)中的每個節(jié)點,而且每個節(jié)點都只訪問一次。
遞歸(recursion),指的是一個函數(shù)不斷調(diào)用自身的行為。比如,以編程方式輸出著名的斐波納契數(shù)列。
有了以上定義,這幾個概念之間的區(qū)別其實就比較清楚了。至于它們之間的聯(lián)系,嚴(yán)格來講,它們似乎都屬于算法的范疇。
換句話說,它們只不過是解決問題的不同手段和方式,而本質(zhì)上則都是計算機編程中達(dá)成特定目標(biāo)的途徑。
5.編碼實戰(zhàn)
6.擴展思考
相對于for(),JS數(shù)組自定義的數(shù)組迭代方式有哪些好處?
答:在實現(xiàn)相同功能的前提下,后者除了能夠節(jié)省代碼量外,在實現(xiàn)某些功能上的流程中存在很多有意思的優(yōu)勢,比如forEach相比普通的for循環(huán)的優(yōu)勢在于對稀疏數(shù)組的處理,會跳過數(shù)組中的空位。for+i在性能測試上是優(yōu)越于后者,但是前提是,array的length要事先計算出來,而在處理非常大量的數(shù)據(jù)時候,后者的優(yōu)勢就顯而易見了。
7.參考文獻(xiàn)
JavaScript高級程序設(shè)計第三版(詳見P96,第五章引用類型中的5.2.8迭代方法)
W3Cschool JavaScript教程
8.更多討論
你還能想到幾種辦法來應(yīng)用以上幾個數(shù)組迭代方式?
ppt鏈接:PPT
視頻鏈接:視頻
鳴謝
感謝大家觀看
BY : 孫劍立 | 郭俊偉
今天的分享就到這里啦,歡迎大家點贊、轉(zhuǎn)發(fā)、留言、拍磚~
------------------------------------------------------------------------------------------------------------------------
技能樹.IT修真院
“我們相信人人都可以成為一個工程師,現(xiàn)在開始,找個師兄,帶你入門,掌控自己學(xué)習(xí)的節(jié)奏,學(xué)習(xí)的路上不再迷?!?。
這里是技能樹.IT修真院,成千上萬的師兄在這里找到了自己的學(xué)習(xí)路線,學(xué)習(xí)透明化,成長可見化,師兄1對1免費指導(dǎo)??靵砼c我一起學(xué)習(xí)吧?!
請點擊鏈接【修真院】