pluck的功能构成
Function composition of pluck
我正在学习 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
不起作用。就我的想法而言,这种勇气将:
- 使用我调用
pluck
的密钥调用 prop
。
- 因此,带有柯里化
key
的 prop
作为函数放入 map
,它从 pipe
返回。
- 然后,如果我将一个数组传递给它,它应该映射到该数组,使用键应用
prop
。
但是,
pluck('foo')([{ foo: 'bar'}]);
[ƒ]
我做错了什么?
因为 built-in .map()
函数将 3 个参数传递给回调,您的代码变得混乱。很容易修复:
const map = curry((fn, arr) => arr.map(v => fn(v)));
我正在学习 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
不起作用。就我的想法而言,这种勇气将:
- 使用我调用
pluck
的密钥调用prop
。 - 因此,带有柯里化
key
的prop
作为函数放入map
,它从pipe
返回。 - 然后,如果我将一个数组传递给它,它应该映射到该数组,使用键应用
prop
。
但是,
pluck('foo')([{ foo: 'bar'}]);
[ƒ]
我做错了什么?
因为 built-in .map()
函数将 3 个参数传递给回调,您的代码变得混乱。很容易修复:
const map = curry((fn, arr) => arr.map(v => fn(v)));