詳解JavaScript 高階函數(shù)
高階函數(shù)簡介
高階函數(shù) 的英文名叫 Higher-Order Function ,是 函數(shù)式編程 中的一種。他的表現(xiàn)形式往往是通過把函數(shù)作為參數(shù)傳入另一個函數(shù),或者將函數(shù)作為另一個函數(shù)的返回值返回。在實際開發(fā)業(yè)務(wù)中, 高階函數(shù)往往可以抽象我們的代碼 ,將我們的命令式編程轉(zhuǎn)換為復(fù)用性更高級的函數(shù)式編程,從而 提升我們的代碼質(zhì)量 。
下面拿3個面試中常問的高階函數(shù)舉例子,希望看完以后能夠提升大家對JS的理解,提高我們的代碼質(zhì)量。 chat is cheap,show you my code~
Array.map()
功能介紹
map() 方法返回一個新數(shù)組,數(shù)組中的元素為原始數(shù)組元素調(diào)用函數(shù)處理后的值。 map() 方法按照原始數(shù)組元素順序依次處理元素。
tips
注意: map() 不會對空數(shù)組進行檢測。 注意: map() 不會改變原始數(shù)組。
實用意義及代碼舉例
//如果我們需要將一個數(shù)組中,每一項元素全都*2, //最基礎(chǔ)的作法,是剛學(xué)JS時的循環(huán)遍歷,再每一項中執(zhí)行*2的操作,例如: let arr1 = [0,1,2,3,4,5,6]; let arr2 = []; for (let i = 0;i<arr1.length;i++){ arr2.push(arr1[i]*2) } console.log(arr2) //[0, 2, 4, 6, 8, 10, 12] //這樣確實可以達(dá)到效果,但是這屬于命令式編程; //換做Map高階函數(shù)的方法實現(xiàn)起來,只需要1行,復(fù)用性也會更強。 let arr1 = [0,1,2,3,4,5,6]; let arr2 = arr1.map((item)=> item*2) console.log(arr2) //[0, 2, 4, 6, 8, 10, 12]
總結(jié):
針對數(shù)組中每一項都要做的操作,可以實用map方法
Array.reduce()
功能介紹
reduce() 方法接收一個函數(shù)作為累加器,數(shù)組中的每個值(從左到右)開始縮減,最終計算為一個值。
reduce() 可以作為一個高階函數(shù),用于函數(shù)的 compose。
tips:
注意: reduce() 對于空數(shù)組是不會執(zhí)行回調(diào)函數(shù)的。
實用意義及代碼舉例
//如果有一個需求,需要我們將數(shù)組中每一項求和 //實用reduce,可以優(yōu)雅簡潔的實現(xiàn): let arr1 = [0,1,2,3,4,5,6]; let arr2 = arr1.reduce((prev,cur)=>{ //prev代表之前所有項的最終結(jié)果,cur代表當(dāng)前項的值 return prev+cur },0) //這里的0是初始項傳入的值,這里寫為0 console.log(arr2) //21 求和完畢 //reduce也可以用于數(shù)組去重 let arr1 = [0,1,2,3,4,5,6,5,6,7,6]; let arr2 = arr1.reduce((prev,cur)=>{ //當(dāng)之前所有項不包含當(dāng)前項元素時,push,否則直接返回之前所有去重項。 prev.indexOf(cur) === -1 && prev.push(cur); return prev },[]) //傳入空數(shù)組作為初始值 console.log(arr2) //[0, 1, 2, 3, 4, 5, 6, 7]
總結(jié):
針對數(shù)組中所有的項累計計算的操作,最終輸入一個值,可以使用reduce方法
Array.filter()
功能介紹
filter() 方法創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。
tips
注意: filter() 不會對空數(shù)組進行檢測。
注意: filter() 不會改變原始數(shù)組。
實用代碼舉例
//例如,需求為獲取數(shù)組中所有大于等于4的元素,將他們組成一個數(shù)組 let arr1 = [0,1,2,3,4,5,6,5,6,7,6]; let arr2 = arr1.filter((item)=>{ return item >= 4 },[]) console.log(arr2) //[4, 5, 6, 5, 6, 7, 6]
總結(jié):
對于數(shù)組中每一項的篩選功能,可以使用filter方法
Array.flat()
功能介紹
flat() 方法可以將嵌套數(shù)組(多為數(shù)組)降維,變成低維數(shù)組或者一維數(shù)組。(數(shù)組攤平展開)
tips
注意: 存在一定兼容性問題,例如IE不兼容
實用代碼舉例
let arr1 = [0,1,2,3,4,5,[1,2,3],[1,2,[1,2,3,4]],6,7,6]; let arr2 = arr1.flat(1) //flat中傳入需要降維的層數(shù),默認(rèn)是1,如果有個三維數(shù)組他會被降級為二位數(shù)組, let arr3 = arr1.flat(Infinity) //[0, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, 1, 2, 3, 4, 6, 7, 6] //如果不管是幾維數(shù)組,需要得到1維數(shù)組的話,可以直接使用Infinity console.log(arr2) //[0, 1, 2, 3, 4, 5, 1, 2, 3, 1, 2, [1,2,3,4], 6, 7, 6]
以上就是詳解JavaScript 高階函數(shù)的詳細(xì)內(nèi)容,更多關(guān)于JavaScript 高階函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript前端面試扁平數(shù)據(jù)轉(zhuǎn)tree與tree數(shù)據(jù)扁平化
這篇文章主要為大家介紹了JavaScript面試中扁平數(shù)據(jù)轉(zhuǎn)tree以及tree數(shù)據(jù)扁平化示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06在chrome瀏覽器中,防止input[text]和textarea在聚焦時出現(xiàn)黃色邊框的解決方法
chrome瀏覽器不管對于開發(fā)者還是一般用戶都可以說是一個相當(dāng)優(yōu)秀的網(wǎng)頁瀏覽器,但是在開發(fā)中,讓人感覺很多余的一個特性就是,在表單項中的控件聚焦時總會出現(xiàn)一個黃色邊框2011-05-05layui自定義驗證,用ajax查詢后臺是否有重復(fù)數(shù)據(jù),form.verify的例子
今天小編就為大家分享一篇layui自定義驗證,用ajax查詢后臺是否有重復(fù)數(shù)據(jù),form.verify的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09詳解Webpack如何引入CDN鏈接來優(yōu)化編譯后的體積
這篇文章主要介紹了詳解Webpack如何引入CDN鏈接來優(yōu)化編譯后的體積,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06JS 驗證密碼 不能為空,必須含有數(shù)字、字母、特殊字符,長度在8-12位
這篇文章主要介紹了JS 驗證密碼 不能為空,必須含有數(shù)字、字母、特殊字符,長度在8-12位的相關(guān)資料,需要的朋友可以參考下2017-06-06JavaScript異步編程:異步數(shù)據(jù)收集的具體方法
我們先嘗試在不借助任何工具函數(shù)的情況下來解決這個問題。筆者能想到的最簡單的方法是:因前一個readFile的回調(diào)運行下一個readFile,同時跟蹤記錄迄今已觸發(fā)的回調(diào)次數(shù),并最終顯示輸出。下面是筆者的實現(xiàn)結(jié)果。2013-08-08