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.
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.
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With