JS高階函式與函式柯里化
高階函式
滿足下列條件之一的函式:
函式作為參會素被傳遞(如回撥函式);
函式可以作為返回值輸出;
一些內建高階函式的例子:
Array.prototype.map
map()方法通過呼叫對輸入陣列中的每個元素呼叫回撥函式來建立一個新陣列。
map()方法將獲取回撥函式的每個返回值,並使用這些值建立一個新陣列。
map()方法的回撥函式總共接收3個引數:element,index和array。
例子:
假設我們有一個數字陣列,我們想建立一個新陣列,新陣列的每個值是原陣列對應值的兩倍。
不使用高階函式:
const arr1 = [1, 2, 3]; const arr2= []; for(let i = 0; i < arr1.length; i ++) { arr2.push(arr[i] * 2); } console.log(arr2); //[2, 4, 6]
使用高階函式:
const arr1 = [1, 2, 3]; const arr2 = arr1.map(item=> item * 2); console.log(arr2);
Array.prototype.filter
filter()方法會建立一個新陣列,其中包含所有通過回撥函式測試的元素。傳遞給filter()方法的回撥函式接受3個引數:element,index和array
例子:
假設我們有一個包含數字值的陣列,選擇其中的數值建立一個數值大於18的陣列
不使用高階函式:
const arr1 = [1, 2, 19, 20]; const arr2 = []; for(let i = 0; i < arr1.length; i ++) { if(arr1[i] > 18) { arr2.push(arr1[1]) } } console.log(arr2)
使用高階函式:
const arr1 = [1, 2, 19, 20]; const arr2 = arr1.filter(item=> item > 18); console.log(arr2)
Array.prototype.reduce
reduce()方法對呼叫陣列的每個元素執行回撥函式,最後生成一個單一的值並返回。
reduce()方法接受兩個引數:redecer函式(回撥),一個可選的initialValue
reducer函式(回撥)接受4個引數:accumulater, currentValue, currentIndex, sourceArray
如果提供了 initialValue,則累加器將等於 initialValue,currentValue 將等於陣列中的第一個元素。
如果沒有提供 initialValue,則累加器將等於陣列中的第一個元素,currentValue 將等於陣列中的第二個元素。
例子:
對一個數字陣列的求和:
不使用高階函式:
const arr = [1, 2, 7]; let sum = 0; for(let i = 0; i< arr.length; i++) { sum = sum + arr[i] }
// 10
使用高階函式:
const arr = [1, 2, 7]; const sum = arr.reduce((accumulator,currentValue)=> return accumulator + currentValue ) // 10
還可以為它提供初始值:
const arr = [1, 2, 7]; const sum = arr.reduce((accumulator,currentValue)=> return accumulator + currentValue,10 ) // 20