高階函式,英文叫 Higher Order function。一個函式可以接收另外一個函式作為引數,這種函式就叫做高階函式。

示例:

function add(x, y, f) {
return f(x) + f(y);
} //用程式碼驗證一下:
add(-5, 6, Math.abs); // 11

一、常見的高階函式

ES6中陣列新增了幾種方法,其中 map、reduce、filter 幾個都是高階函式,除此,普通的sort也是高階函式。分別介紹下新增的三個方法。

1.1、filter

filter 是過濾陣列,返回滿足條件的資料,組成一個新的陣列返回,不滿足條件的被丟棄。

例項1:取出陣列中小於 100 的資料,放到一個新陣列中

let grad = [ 102, 188, 55, 66, 200, 800 ]
let arr2 = grad.filter( function(item){
return item <= 100
})
console.log("arr2",arr2)// 55, 66

上述例項中,filter傳入的引數是一個函式,傳入的函式依次作用於每個元素,然後根據返回值是 true 或 false 決定保留還是丟棄元素。因為只有 55 66 兩個滿足條件,所以新的陣列中只有這兩個元素。

1.2、map

map 是對映的意思。

原陣列被對映成一個新的陣列,返回值是一個新陣列,不改變原來的陣列。新的陣列與原陣列的長度是不會改變的。

例項2:給資料每個元素放大 2 倍。

let arr2 = [ 55, 66 ]
let arr3 = arr2.map( item => {
return item*2
})
//返回結果 [ 110, 132 ]

上述例項,map接收的引數是一個函式,該函式依次作用於每個元素,對元素放大了2倍,也可以對其進行任意的複雜操作。

1.3、reduce

reduce 是對陣列進行彙總的,往往進去一個數組,出來是一個數據。經常用於求和和計算平均值。

例項3:對上個例項返回的結果進行求和。

let sum = arr3.reduce((tmp,item)=>{
return tmp+item
})
//返回結果 242

重點來了,如果我們想把上邊三個例項合併到一起執行,最終我們可以寫得有多簡單呢?

// 複雜寫法
let grad = [102,188,55,66,200,800]
let arr2 = grad.filter(function(item){
return item <= 100
})
let arr3 = arr2.map(item=>{
return item*2
})
let sum = arr3.reduce((tmp,item)=>{
return tmp+item
})
//簡單寫法
let sum2 = grad
.filter( item => {return item <= 100})
.map(item=>{return item*2})
.reduce((tmp,item)=>{return tmp+item})