I have two arrays:
const tags=["filter1","filter2","filter3"]
const data = [{name:"aaaaa",tags:["filter1","filter2","filter3","filter4"]},{name:"bbbb",tags:["filter"]}]
I need something like this, but I can`t pass array into includes method
const newData = data.filter(i=>i.tags.includes(tags) === true) //[{name:"aaaaa",tags:["filter1","filter2","filter3","filter4"]
Use Array.prototype.filter() and Array.prototype.some()
const data = [
{name:"a", tags:["filter1", "filter2", "filter3", "filter4"]},
{name:"b", tags:["filter5"]},
{name:"c", tags:["filter6"]},
{name:"d", tags:["filter3", "filter9"]}
];
const filterByTags = (arr, tags) => arr.filter(ob => ob.tags.some(tag => tags.includes(tag)));
console.log(filterByTags(data, ["filter3", "filter4", "filter6"]));
The above will return the Objects with "name" a, c, d:
a because of filter3 or either filter4b Not. because has none of filter3 4 6)c because of filter6d because of filter3You probably want either one of these two:
const newData = data.filter(d => tags.every(t => d.tags.includes(t)));
const newData = data.filter(d => tags.some(t => d.tags.includes(t)));