gpt4 book ai didi

javascript - 如何使用 Ramda 编写 point-free 函数式 JS

转载 作者:行者123 更新时间:2023-11-29 17:44:41 24 4
gpt4 key购买 nike

我有一个对象数组

const myNumbers = [
{
top: 10,
bottom: 5,
rate: 5
},
{
top: 9,
bottom: 4,
rate: 3
},
];

我想在对数字做任何事情之前运行一些函数使数字可用;

const addTen = r.add(10);
const double = r.multiply(2);

还有一个接受数字并做一些数学运算的函数:

const process = (top, bottom, rate) => r.multiply(r.subtract(bottom, top), rate)

所以我的最终函数看起来像

muNymbers.map(({ top, bottom, rate }) =>
process(addTen(top), double(bottom), rate)
);

只要看这段代码,您就会发现这两个函数已经变得非常嵌套并且不是特别清晰。我真正的问题再次稍微复杂一些,我正在努力了解如何在为不同的操作选择不同的值时使这一点变得毫无意义。

最佳答案

这是 无点方法。您正在寻找的主要功能是 pipeevolveconverge。我不确定这是否是最好的方式,这是我能想到的最好的方式:

const { add, converge, evolve, map, multiply, pipe, prop, subtract } = R;

const myNumbers = [
{ top: 10, bottom: 5, rate: 5 },
{ top: 9, bottom: 4, rate: 3 },
];

const process = pipe(

evolve({
top: add(10),
bottom: multiply(2),
}),

converge(multiply, [

converge(subtract, [
prop('bottom'),
prop('top'),
]),

prop('rate'),
]),
);

console.log(map(process, myNumbers));
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

关于javascript - 如何使用 Ramda 编写 point-free 函数式 JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50664808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com