我是函数式编程的新手,对管道有疑问。
说我有以下功能:
const modifyArr = R.curry((i, newValue, arr) =>
Object.assign([], arr, {[i]: newValue}))
此函数更改特定索引上的数组值。
现在,我想使用这个函数两次(使用管道),以便在数组中的两个元素之间实现交换。
我无法弄清楚如何写它。这就是我得到的:
const swap = (arr, a, b) =>
R.pipe(modifyArr(b, arr[a], modifyArr(a, arr[b])))
请注意,modifyArr的curried版本(在接收到两个参数之后)需要一个数组,但是我将3个参数传递给swap函数。
如何在父函数接收与管道中第一个函数不同的参数的情况下使用管道?
感谢。
答案 0 :(得分:2)
鉴于你的函数是curry,你可以在执行管道之前简单地部分应用前面的参数:
const swap = (arr, a, b) => R.pipe(modifyArr(a, arr[b]), modifyArr(b, arr[a]))(arr);