如何检查Ramda中不同的道具是否相同?

时间:2017-10-06 16:09:58

标签: ramda.js

我如何检查第一个和最后一个是否相同?

const obj = {
    first: 5,
    last: 5,
}

这是一个更大问题的一小部分,我将在这里粘贴给后人:

[
    { first: 5, last: 5, things: [{id: null, item: null} ] },
    { first: 10, last: 15, things:[
        {id: null, item: 10}, {id: null, item: 13}, {id: null, item: 14} 
    ]}
]

基本上我需要将这些数据简化为:

[[5], [10,13,14]]

基本上要做到这一点,我需要一些条件逻辑,要么查看顶级对象是否为item为null,或者(如果第一个和最后一个相等则更容易)。如果第一个和最后一个是相同的,抓住他们的任何数字,否则映射"事物"并退回物品。

2 个答案:

答案 0 :(得分:1)

不得不跳过一些篮球才能让它畅通无阻!肯定会受益于在真实场景中分割成更小的功能。

map(
   ifElse(
     compose(apply(equals), props(['first', 'last'])),
     compose(of, prop('first')),
     compose(pluck('item'), prop('things'))
   )
 )(input)

答案 1 :(得分:0)

刚遇到这个,我知道它很旧,但仍然有用。

现在使用 Bicycle 函数可以更轻松地处理等效性测试:

converge

要对 2 个道具进行通用相等,您可以这样做:

converge(equals, [prop('first'), prop('last')])

尽管这会导致非柯里化函数(您必须同时提供包含要测试的 2 个道具和对象的数组)。 我确定有更好的方法...