前端面試手寫練習 - partial
- 文章發表於
問題
partial 是將函式 庫里化 (Currying) 的一種方式,它可以接受一個函式和部分參數,並返回一個新的函式,這個新的函式將會接受剩餘的參數。當所有參數都被提供時,將會執行原始函式。
function partial(func: Function, ...args: any[]): Function
範例
在開發中,時常會將資料處理的邏輯抽象化成一個通用函式,目的是讓該功能可以更方便地被重複使用。
舉例來說,很多情況下我們在實作功能前已經知道了 API 的端點,但是 id 是動態的,所以可能會將函式根據業務邏輯進行拆分:
// api.jsconst getPostById = (id) => fetch(`https://jsonplaceholder.typicode.com/posts/${id}`)const getUserById = (id) => fetch(`https://jsonplaceholder.typicode.com/users/${id}`)// app.jsconst btn = document.querySelector('btn')btn.addEventListenr('click', async (evt) => {const { value } = evt.targetconst post = await getPostById(value)})
這樣的寫法沒有問題,但是如果有接觸過一些函數式編程的話,可能會發現這樣的寫法有點冗長,這時候就可以使用 partial
來簡化:
// api.jsconst fetchById = (url, id) => fetch(url, id)const getPostById = partial(fetchById, 'https://jsonplaceholder.typicode.com/posts')const getUserById = partial(fetchById, 'https://jsonplaceholder.typicode.com/users')
練習區
在了解問題後,可以嘗試先寫下您的思路,再到下方的練習區域實際寫出程式碼。
追問
- 支援
placeholder
的partial
函式。
const _ = partial.placeholderconst subtract = (a, b) => a - bconst subtractFrom10 = partial(subtract, _, 10)subtractFrom10(5) // -5
筆者解答
function partial(func, ...args) {return function partiallyApplied(...restArgs) {return func.call(this, ...args, ...restArgs);};}
相關題目
如果您喜歡這篇文章,請點擊下方按鈕分享給更多人,這將是對筆者創作的最大支持和鼓勵。