【问题标题】:How would I create an invert higher order function?我将如何创建一个反转高阶函数?
【发布时间】:2018-10-01 19:39:02
【问题描述】:

我需要创建一个名为 invert 的高阶函数。它应该执行以下操作:

返回一个新函数。 将函数作为其唯一参数。 内部函数应该接受任意数量的参数并反转对传递函数的调用。

到目前为止我只有http://prntscr.com/l0rma0,但它只适用于没有参数的函数。

【问题讨论】:

  • 请将代码作为代码发布在这里,而不是作为图片链接。当您使用它时,您的意见会有所帮助:meta.stackoverflow.com/q/374700/476
  • 当你做!func时你期望你的输出是什么
  • 我希望它只是反转通过 function invert(func) { return function() { return !func; 传递的函数。 }; }
  • 你能解释一下函数逆的概念
  • @AlexKeeley 请在你的帖子中包含一个工作示例

标签: javascript function higher-order-functions


【解决方案1】:

希望这应该足够了:

function invert(fn) {
  return (...args) => !fn(...args);
}

这是测试用例:

function invert(fn) {
  return (...args) => !fn(...args);
}

// test 1
const returnsTrue = () => true;
const returnsFalse = invert(returnsTrue);

console.log( returnsFalse() === false );

// test 2
const isEven = x => x % 2 === 0;
const isOdd = invert(isEven);

console.log( isOdd(13) === true );
console.log( isOdd(10) === false );

// test 3
const isSumBiggerThan100 = (...args) => args.reduce((acc, val) => acc + val) > 100;
const isSumLessThanOrEqualTo100 = invert(isSumBiggerThan100);

console.log( isSumLessThanOrEqualTo100(10, 3, 8, 5, 4, 20) === true);
console.log( isSumLessThanOrEqualTo100(70, 10, 50, 23) === false)

【讨论】:

  • 谢谢!当它们被展示时,我总是能理解它们,但我正在努力创造它们。非常感谢
  • 对高阶函数/组合器有信心需要时间。很高兴它有帮助。
  • @AlexKeeley 顺便说一句,如果您觉得满意,您介意接受答案吗?
【解决方案2】:
const higherFunction = (something) => {
  return function innerFunc(...params) {
    return !something;
  }
};

你的意思是这样的吗?

【讨论】:

  • 是的,但我仍然得到错误而不是正确prntscr.com/l0s4rg 输入太多,这些是我需要通过的测试用例
猜你喜欢
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
相关资源
最近更新 更多