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