如何使用Ramda编写无点函数JS?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (84)

我有一个对象数组

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>

用户回答回答于
const process = ({top, bottom, rate}) => ((2 * bottom) - (10 + top)) * rate;

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

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

​我建议你这样做。例如,

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

你可以写

lift(subtract)(prop('bottom'), prop('top'))

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问30 回答
  • 学生

    3 粉丝476 提问28 回答
  • o o

    4 粉丝494 提问27 回答

扫码关注云+社区

领取腾讯云代金券