为了账号安全,请及时绑定邮箱和手机立即绑定

Ramda:如何使用嵌套对象过滤数据?

Ramda:如何使用嵌套对象过滤数据?

白衣染霜花 2022-05-22 10:05:05
const articles = [    {title: 'title 1', published: false, pages: 30, tags: {name: 'work', id: 1, visibility: "everyone"}},    {title: 'title 2', published: false, pages: 25, tags: {name: 'home', id: 3, visibility: "myself"}},    {title: 'title 3', published: true, pages: 30, tags: {name: 'vacation', id: 5, visibility: "myself"}}];我的 JSON 数据看起来像这样,我需要根据published true 和visibility我自己的值进行过滤。我怎样才能以有效的方式实现这一目标?对此有任何帮助将不胜感激。到目前为止,我只能使用单个属性进行过滤  R.filter(R.propEq("published", false))(articles);
查看完整描述

2 回答

?
米脂

TA贡献1836条经验 获得超3个赞

像这样的东西:


R.filter(

  R.allPass([

    R.propEq("published", false),

    R.pathEq(["tags", "visibility"], "myself")

  ])

)(articles);


查看完整回答
反对 回复 2022-05-22
?
浮云间

TA贡献1829条经验 获得超4个赞

您可以使用规范对象:


const predicate = R.where({

  published: R.equals(true),

  tags: R.where({

    visibility: R.equals('myself'),

  }),

});



// ==


const data = [

  {title: 'title 1', published: false, pages: 30, tags: {name: 'work', id: 1, visibility: "everyone"}},

  {title: 'title 2', published: false, pages: 25, tags: {name: 'home', id: 3, visibility: "myself"}},

  {title: 'title 3', published: true, pages: 30, tags: {name: 'vacation', id: 5, visibility: "myself"}}

];


console.log(

  R.filter(predicate, data),

);

<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.27.0/ramda.js" integrity="sha256-buL0byPvI/XRDFscnSc/e0q+sLA65O9y+rbF+0O/4FE=" crossorigin="anonymous"></script>


查看完整回答
反对 回复 2022-05-22
  • 2 回答
  • 0 关注
  • 102 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信