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