首页 > 解决方案 > ramda js 用 find 组合,用修剪值选择

问题描述

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选择(名称,城市)和修剪值。任何帮助

标签: javascriptfunctional-programmingfindramda.js

解决方案


你几乎猜对了。不要使用compose

const getData = (id, xs) =>
    typeof id !== "number" ? id :
    R.find(R.propEq("id", id))(xs);

你不能用一个列表来组合一个函数。


推荐阅读