对深层嵌套的高阶函数应用递归

时间:2018-05-24 16:13:29

标签: javascript algorithm functional-programming

我正在解决Kolodny的Javascript练习(here),特别是'价值'练习。

问题要求我创建一个函数fn,其中fn(value)将返回一个答案。如果value是标量(即4),它将返回4.

如果value是一个函数,它将返回该函数的返回值。如果value是嵌套函数,它将返回深层嵌套函数的值。例如:

var fn = function() {
  return function() {
    return 4;
   };
};
assert.equal(value(fn), 4);

我使用以下方法天真地解决了这个问题:

exports.value = (val) => {
  if (typeof val == 'function') {
    if (typeof val() == 'function') {
      if (typeof val()() =='function') {
        if (typeof val()()() =='function') {
          return false
        } else {
          return val()()();
        }
      } else {
        return val()();
      }
    } else {
      return val();
    }
  } else {
    return val;
  }
}

此代码要求可重用性。 有没有办法使用递归来调用n个深层嵌套的匿名函数?

1 个答案:

答案 0 :(得分:5)

const value = v => typeof v === "function" ? value(v()) : v;

再次使用函数的结果再次调用value

更具可读性:

function value(v) {
  if (typeof v === "function") {
    return value(v()); // !!!
  } else {
    return v;
  }
}