javascript - ramda js 与 find、pick 和 trim 值组合

标签 javascript functional-programming find ramda.js

const obj = [
 {id: 1, name:'name1  ', age: 26, city: 'city1     '},
 {id: 2, name:'name2', age: 24, city: 'city2  '},
 {id: 3, name:'  name3', age: 28, city: '      city3  '},
 {id: 4, name:'name4  ', age: 25, city: 'city4  '}
]

我有这样的功能

id 可能是 1,2,3,4...或...'All'

getData(id, obj) {
  if(id && id !=='All'){
    const res = obj.find((o) => o.id === id)
    return `${res.name.trim()} ${res.city.trim()}`
  } else if(id === 'All') {
    return 'All'
  }
  return ''
}

getData(1, obj) // name1 city1
getData('All', obj) // All

我尝试过ramda js来转换上面的代码,

getData(id, obj) {
  return (id !== 'All') ? compose(R.find(R.propEq('id', id)))(obj) : 'All'
}

预期的o/p是

getData(1, obj) => 'name1 city1'
getData('All', obj) => 'All'
getData('', obj) => ''

如何使用 ramda 选取(名称、城市)并 trim 值。任何帮助

最佳答案

我会做类似下面的事情

const getData = (id, obj) =>
  id == 'All' : 'All'                
  ? R.pipe(
      R.find(R.propEq('id', id)),    // {id: ..., name: '  foo', city: 'bar  '} | null
      R.ifElse(                      
        R.isNil,                     // if null
        () => '',                    // then ''
        R.pipe(                      // else
          R.props(['name', 'city']), // ['  foo', 'bar  ']
          R.map(R.trim)              // ['foo', 'bar']
          R.join(' ')                // 'foo bar'
        )
      )
    )(obj)

希望这对你有帮助:)

关于javascript - ramda js 与 find、pick 和 trim 值组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51482543/

相关文章:

linux - 如何在名称包含另一个字符串且在过去 7 天内在 Linux 中创建的文件中搜索字符串?

javascript - 对 Javascript、PHP 和 Dart 进行基准测试

scala - 如何使用函数式编程返回列表中的所有正数和第一个负数?

javascript - jquery !$ 代码错误?或没有?

c中的转换

java - 使用 scala 模式匹配而不是 java switch case 有什么优势?

javascript - 当脚本代码更改文本时返回输入的 javascript 堆栈跟踪

c++ - 将 find 与 QAssociativeIterable 或 QSequentialIterable 一起使用,同时避免在 Qt5 中进行复制

javascript - Jquery 无法以动态生成的形式工作

javascript - 如何使用 Ajax、Json 和 Node.js 刷新表格数据