【发布时间】:2021-04-25 18:50:20
【问题描述】:
Ramda 中是否有一个函数可以将函数列表应用于类似于juxt() 的参数列表,但每个函数仅在参数列表中的相应索引处提供参数?类似于:
pipe(zip, map(([a, b]) => a(b)))([func1, func2], ['arg1', 'arg2']);
有没有更好的方法来做到这一点?
【问题讨论】:
标签: javascript functional-programming ramda.js
Ramda 中是否有一个函数可以将函数列表应用于类似于juxt() 的参数列表,但每个函数仅在参数列表中的相应索引处提供参数?类似于:
pipe(zip, map(([a, b]) => a(b)))([func1, func2], ['arg1', 'arg2']);
有没有更好的方法来做到这一点?
【问题讨论】:
标签: javascript functional-programming ramda.js
使用 R.zipWith 从提供的两个列表中创建一个新列表,通过将函数应用于列表中的每个等位对。
您也可以将回调替换为 R.call,它会调用第一个参数,并将其余的作为参数传递。
const { zipWith, call } = R;
const fn = zipWith(call);
const func1 = R.add(1);
const func2 = R.add(2);
const result = fn([func1, func2], [1, 2]);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.1/ramda.min.js" integrity="sha512-rZHvUXcc1zWKsxm7rJ8lVQuIr1oOmm7cShlvpV0gWf0RvbcJN6x96al/Rp2L2BI4a4ZkT2/YfVe/8YvB2UHzQw==" crossorigin="anonymous"></script>
【讨论】:
call 的粉丝,但恕我直言,使用zipWith 绝对是正确的做法。
zipWith((a, b) => a(b)) 以匹配上面的 map(…) 并使事情稍微更明显(在文档中查找少一件事)但我只是在吹毛求疵。跨度>