JavaScript中常見的高階函數(shù)總結(jié)
前言
一個(gè)函數(shù)可以接受另一個(gè)函數(shù)作為參數(shù),就把這個(gè)函數(shù)叫做高階函數(shù)。
一個(gè)最簡單的高階函數(shù):
function add(x, y, f) { return f(x) + f(y); } //當(dāng)調(diào)用add(-5, 6, Math.abs)時(shí),參數(shù)x,y和f分別接收-5,6和函數(shù)Math.abs,根據(jù)函數(shù)定義,可以推導(dǎo)計(jì)算過程為: //x = -5; //y = 6; //f = Math.abs; //f(x) + f(y) ==> Math.abs(-5) + Math.abs(6) ==> 11; //return 11; //用代碼驗(yàn)證一下: add(-5, 6, Math.abs); // 11
map函數(shù)
map()方法定義在JavaScript的數(shù)組中,我們調(diào)用Array的map()方法,傳入我們自己的函數(shù),就得到了一個(gè)新的數(shù)組。
舉個(gè)例子:現(xiàn)在有一個(gè)數(shù)組,想讓每個(gè)數(shù)組元素都變成它的平方,輸出這個(gè)新數(shù)組,傳統(tǒng)方法也很簡單,今天我們用map函數(shù)來寫:
function pow(x) { return x * x; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; alert (arr.map(pow))
reduce函數(shù)
數(shù)組的reduce()把一個(gè)函數(shù)作用在這個(gè)數(shù)組的[x1, x2, x3…]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce()把結(jié)果繼續(xù)和序列的下一個(gè)元素做累積計(jì)算。
舉個(gè)例子:
let arr=[6,8,8,6,9,6] let a=arr.reduce(function(x,y){ return x+y; }) alert(a)
filter函數(shù)
filter函數(shù)可以說是數(shù)組的一個(gè)過濾函數(shù),它會將接收的函數(shù)作用于每一個(gè)元素,然后根據(jù)返回的布爾值決定這個(gè)元素留下還是丟掉。
filter()接收的回調(diào)函數(shù),其實(shí)可以有多個(gè)參數(shù) ,通常我們僅使用 第一個(gè)參數(shù) 表示元素的位置和數(shù)組本身。
看一個(gè)簡單的例子:有一個(gè)數(shù)組,現(xiàn)在想只保留數(shù)組的偶數(shù)元素,奇數(shù)元素全部過濾掉,看下代碼:
var arr = [1,2,1,2,1,2,1,2]; var r = arr.filter(function (x) { return x % 2 == 0; }); alert(r)
sort
sort主要用于排序
看下例子:有一個(gè)數(shù)組,想將它按從小到大或從大到小的順序排列,看下代碼:
//從小到大排列 let arr=[1,3,1,2,3,6,4,3] let arr1=arr.sort((a,b)=>a-b) alert(arr1)
//從大到小排列 let arr=[1,3,1,2,3,6,4,3] let arr1=arr.sort((a,b)=>b-a) alert(arr1)
every方法
數(shù)組對象提供的every()方法判斷數(shù)組的所有元素是否滿足測試條件
舉個(gè)例子:測試數(shù)組元素是否大于6
let arr=[4,6,8,8] let result=arr.every(function(a){ return a>6 }) alert(result)
find方法
數(shù)組對象提供的find()方法用于查找符合條件的第一個(gè)元素,如果找到 了,返回這個(gè)元素,否則,返回undefined
let arr=[4,6,8,9] let result=arr.find(function(a){ return a>6 }) alert(result)
findIndex方法
數(shù)組對象提供的find()方法用于查找符合條件的第一個(gè)元素,如果找到 了,返回這個(gè)元素的索引
let arr=[4,6,8,9] let result=arr.findIndex(function(a){ return a>6 }) alert(result)
foreach方法
forEach() 方法對數(shù)組的每個(gè)元素執(zhí)行一次給定的函數(shù)
舉個(gè)例子:遍歷數(shù)組,先使用傳統(tǒng)的for循環(huán),再使用foreach函數(shù),看下代碼:
const items = ['item1', 'item2', 'item3']; const copy = []; //傳統(tǒng)方式 for (let i=0; i<items.length; i++) { copy.push(items[i]); } // foreach方法 items.forEach(function(item){ copy.push(item); });
總結(jié)
到此這篇關(guān)于JavaScript中常見的高階函數(shù)總結(jié)的文章就介紹到這了,更多相關(guān)JavaScript高階函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript數(shù)組的?splice?方法詳細(xì)介紹
這篇文章主要介紹了Javascript數(shù)組的splice方法詳細(xì)介紹,splice方法通過刪除或替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容。此方法會改變原數(shù)組2022-09-09用js閉包的方法實(shí)現(xiàn)多點(diǎn)標(biāo)注冒泡示例
這篇文章主要介紹了用js閉包的方法實(shí)現(xiàn)多點(diǎn)標(biāo)注冒泡,需要的朋友可以參考下2014-05-05關(guān)于js中window.location.href,location.href,parent.location.href
關(guān)于js中window.location.href,location.href,parent.location.href,top.location.href的用法2010-10-10基于JavaScript短信驗(yàn)證碼如何實(shí)現(xiàn)
我們在使用移動(dòng)、電信等運(yùn)營商網(wǎng)上營業(yè)廳的時(shí)候,為確保業(yè)務(wù)的完整和正確性,經(jīng)常會需要用到短信的驗(yàn)證碼。最近因?yàn)槟呈I(yè)務(wù)需要,也做了個(gè)類似的功能2016-01-01javascript 模擬JQuery的Ready方法實(shí)現(xiàn)并出現(xiàn)的問題
今天在閱讀網(wǎng)上一些模擬Jq的ready方法時(shí),發(fā)現(xiàn)一些小細(xì)節(jié),就是網(wǎng)上的ready事件大部分都是在onload事件執(zhí)行后加載,而jquery確能在onload加載前。2009-12-12JavaScript處理數(shù)組數(shù)據(jù)的示例詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript如何處理數(shù)組數(shù)據(jù),包括數(shù)據(jù)匹配和剔除,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-10-10JavaScript中Textarea滾動(dòng)條不能拖動(dòng)的解決方法
這篇文章主要介紹了JavaScript中Textarea滾動(dòng)條不能拖動(dòng)的解決方法,主要針對IE瀏覽器中Textarea滾動(dòng)條綁定了onfocus事件時(shí)分析對應(yīng)的處理方法,需要的朋友可以參考下2015-12-12