代码之家  ›  专栏  ›  技术社区  ›  Rey

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

  •  0
  • Rey  · 技术社区  · 8 年前

    我该如何检查第一个和最后一个在这里是否相等?

    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]]
    

    基本上要做到这一点,我需要一些条件逻辑,要么看看顶级对象的项是否为null,要么(看起来更容易)第一个和最后一个是否相等。如果第一个和最后一个相等,抓取它们的任何数字,否则映射“事物”并返回项目。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Ross Mackay    8 年前

    必须跳过几圈才能让它毫无意义!在真实场景中拆分成更小的函数肯定也会带来好处。

    map(
       ifElse(
         compose(apply(equals), props(['first', 'last'])),
         compose(of, prop('first')),
         compose(pluck('item'), prop('things'))
       )
     )(input)
    
        2
  •  0
  •   jramm    4 年前

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

    现在,使用 converge 功能:

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

    要实现2个道具的一般相等,可以执行以下操作:

    const propsEq = R.compose(R.apply(R.equals), R.props)

    尽管这会产生一个非curried函数(您必须同时提供包含要测试的2个道具和对象的数组)。 我相信有更好的方法。。。