Skip to content

每日一题 - 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)