每日一题 - 2019-09-02 - 【编程题】实现高阶函数combinedFetcher
信息卡片
- 时间:2019-09-02
- tag:
编程题
问题描述
A fetcher
is
js
function fetcher(arg, cb){
let res = fetch(arg);
cb(res);
}
function fetcher(arg, cb){
let res = fetch(arg);
cb(res);
}
Write a higher-order function combinedFetcher
, using callback to get all the fetched data.
E.g.
js
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log);
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log);
参考实现
这其实是一道互联网大厂的面试真题,笔者也碰到过。
js
function fetch(arg) {
return `response with: ${arg}`;
}
function fetcher(arg, cb){
let res = fetch(arg);
cb(res);
}
function combinedFetcher(...args) {
const len = args.length;
let cnt = 0;
const res = [];
function innerCB(r, cb) {
cnt++;
res.push(r)
if(cnt === len) cb(res);
}
return cb => args.forEach(arg => fetcher(arg, r => innerCB(r, cb)));
}
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log)
function fetch(arg) {
return `response with: ${arg}`;
}
function fetcher(arg, cb){
let res = fetch(arg);
cb(res);
}
function combinedFetcher(...args) {
const len = args.length;
let cnt = 0;
const res = [];
function innerCB(r, cb) {
cnt++;
res.push(r)
if(cnt === len) cb(res);
}
return cb => args.forEach(arg => fetcher(arg, r => innerCB(r, cb)));
}
const fetchFruitsAndDrinks = combinedFetcher("fruits", "drinks");
fetchFruitsAndDrinks(console.log)