利用ramda处理数据
一、取出对象中的某个属性
const people = {
name:"jack",
age:18,
sex:"男"
}
// 取出people对象中的name属性
R.pathOr('--',["name"],people) //根据路径去查找 如果people路径上没有name那么用‘--’来代替,通常用来处理页面需要显示相关字段 如果字段不存在显示--
R.propOr("--","name",prople) // 取出people对象中的name属性 如果不存在返回-- 和pathOr类似,为了防止页面异常显示出undefined
R.prop("name",people) // 如果对象上不存在name属性 返回undefined
R.path(["name"],people) // 和prop一样如果对象不存在值 返回undefined
path和prop方法的使用上有类似的地方,两个都可以在后面追加Or可以指定默认值。但prop只能取出对象中指定的属性值,而path是取出对应路径上的值,在对象属性比较复杂有嵌套时能够很快的取出对应的值。比如
const people={
name:"jack",
age:18,
sex:"男",
favour:["跳舞","唱歌"]
}
R.path(["favour",0],people)//就可以取出people中favour数组的第一个元素的值
const obj={
a:{b:{c:1,d:2}}
}
R.path(["a","b","c"],people)//通过指定路径 就可以取出c的值
二、取出集合的某个属性值并转化成逗号隔开的字符串
const interests = [{storeName:"门店1",id:1},{storeName:"门店2",id:2}]
const stores = R.pluck('storeName',interests) //=>["门店1","门店2"]
//一般页面显示时还会把她转换成字符串
const storeName = R.join(',',stores) //=>"门店1,门店2" 用于显示
pluck也可以用于处理前端在提交参数时,后端需要集合中的id数组。
const selectObj = [{id:1,...},{id:2,...}...{id:14,...}]
const ids = R.pluck('id',selectObj) //=>[1,2,...,14]
三、删除对象中的某个属性
R.dissoc('b',{a:1,b:2,c:3}) //=>{a:1,c:3}
R.omit(['a','b'],{a:1,b:2,c:3,d:4}) //=>{b:2,c:3}
R.dissoc()只能删除某个属性,omit可以同时删除对象的多个属性
四、取出集合中某个属性满足条件的元素
const obj = [
{type:"Food",name:"面条"},
{type:"Animal",name:"猫咪"},
{type:"Food",name:"大米"}
]
R.find(R.propEq("type", "Food"),obj) //取出type类型为Food的元素
五、通过R.map()遍历出带有index的列表
const list = [
{name:"jack"},
{name:"lucy"}
]
{R.addIndex(R.map)(
(item, index) => (
<Fragment key={index}>
<div>{R.propOr("--","name",item)}</div>
</Fragment>
),
R.defaultTo([],list)
)}