-->

Ramda: How to filter based on a value in a nested

2019-02-03 13:39发布

问题:

I'm trying to accomplish this in a functional manner (with Ramda). My JSON is structured like this

[
    {username: 'bob', age: 30, tags: ['work', 'boring']},
    {username: 'jim', age: 25, tags: ['home', 'fun']},
    {username: 'jane', age: 30, tags: ['vacation', 'fun']}
]

and I am trying to filter based on a value in the 'tags' property, but have not been successful. I am able to filter on ints/strings (age and username), but I can't figure out how to do so with values in nested arrays (tags). Any help would be much appreciated.

回答1:

There are many ways you could do this. But I think the cleanest one would be:

R.filter(R.where({tags: R.contains('fun')}))

You can see it in action in the Ramda REPL.

Other options, especially if the field is more deeply nested is to compose (or pipe) prop or path calls with contains or possibly to take advantage of lenses.

Still, I think the answer above is most readable.



回答2:

const arr = [
 {username: 'bob', age: 30, tags: ['work', 'boring']},
 {username: 'jim', age: 25, tags: ['home', 'fun']},
 {username: 'jane', age: 30, tags: ['vacation', 'fun']}
];

res = R.filter(R.where({tags: R.contains('home')}), arr);


标签: ramda.js