Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

ramda.js

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.

like image 440
user3783301 Avatar asked Mar 25 '15 11:03

user3783301


2 Answers

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

R.filter(R.where({tags: R.includes('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.

like image 177
Scott Sauyet Avatar answered Oct 13 '22 08:10

Scott Sauyet


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);
like image 3
Zhang Yung Avatar answered Oct 13 '22 06:10

Zhang Yung