代码之家  ›  专栏  ›  技术社区  ›  John Taylor

以无点方式使用Ramda map helper

  •  2
  • John Taylor  · 技术社区  · 9 年前

     map(user => assoc('isAdult', isAdult(user), user)
    

    无点运行(使用Ramda)。我在想怎么做 useWith

    有什么想法吗?

    import { pipe, prop, gte, __, map, assoc, sortWith, descend } from 'ramda'
    
    const isAdult = pipe(
      prop('age'),
      gte(__, 18)
    )
    
    const func = pipe(
      map(user => assoc('isAdult', isAdult(user), user)),
      sortWith([
        descend(prop('isAdult')),
        descend(prop('age')),
      ])
    )
    
    export default func
    

    编辑 (更多信息):

    我想创建一个函数,返回由 isAdult 钥匙如果用户超过18岁,我们将标志设置为 true

    此外,该函数应返回按标志排序的用户 伊萨杜尔特 age .

    样本数据:

    const data1 = [
      {
        name: 'Cassidy David',
        email: 'sit@Nullaeuneque.co.uk',
        id: 'FC92BF1E-A6FD-E5C1-88AB-183BD1BC59C5',
        position: 1,
        age: 53,
        created_at: '2017-04-07'
      },
      {
        name: 'Gwendolyn Edwards',
        email: 'ut.mi.Duis@elementumsemvitae.net',
        id: '00000001-ED9D-3A88-0D3C-07A148FD43ED',
        position: 2,
        age: 10,
        created_at: '2016-05-21'
      },
    
    2 回复  |  直到 9 年前
        1
  •  3
  •   Scott Sauyet    9 年前

    我认为,让这一点自由化是否有用,这是有争议的。

    map(user => assoc('isAdult', isAdult(user), user)),
    

    无点是一种伟大的技术,有时可以提高可读性。但如果没有,我也不会为此烦恼。

    chain 可能是最有用的。注意链是如何为函数工作的: chain(f, g)(x) //=> f(g(x), x)

    所以你可以把你的相关部分写成

    map(chain(assoc('isAdult'), isAdult))
    

    你可以在网上看到这一点 Ramda REPL .

        2
  •  3
  •   Mario F    9 年前

    好的,我得到了一个解决方案,尽管这是否比您已经拥有的更清晰,这是一个相当有争议的问题:

    const newFields = map(pipe(isAdult, objOf('isAdult')))(data1)
    zipWith(merge, data1, newFields)
    

    我在做一个额外的过程,生成一个列表,其中的对象只有一个新的键,并将它们合并在一起,然后合并列表。

    我无法得到一个解决方案,在不避免箭头函数的情况下进行一次传递,就像你做的那样。

    推荐文章