拔毛功能组成

时间:2019-07-13 16:05:36

标签: javascript functional-programming currying

我正在学习JS中的函数编程,并且正在尝试编写自己的pluck

const curry = (f, arr = []) => (...args) =>
  (a => (a.length === f.length ? f(...a) : curry(f, a)))([
    ...arr,
    ...args,
  ]);
const map = curry((fn, arr) => arr.map(fn));
const pipe = (...fns) => x => fns.reduce((y, f) => f(y), x);
const prop = curry((key, obj) => obj[key]);

const pluck = pipe(prop, map);

但是由于某些原因,pluck不起作用。据我认为,这种采摘会:

  • 使用我用来调用prop的键调用pluck
  • 因此,将带有prop的{​​{1}}作为函数放入key中,该函数从map返回。
  • 然后,如果我将其传递给数组,它应该映射到该数组上,并使用pipe和键。

但是

prop

我在做什么错了?

1 个答案:

答案 0 :(得分:2)

由于内置的​​.map()函数将3个参数传递给回调,因此您的代码变得混乱。很容易解决:

const map = curry((fn, arr) => arr.map(v => fn(v)));