Reputation: 58
I have an array of users and each user has a array of tags and I have an array of selected Tags What is the best way in ES6 to filter the users by selected tags
const users = [
{
username: "john",
tags: [{id:1}, {id:3},{id:5},{id:7}]
},
{
username: "becky",
tags: [{id:1}, {id:7},{id:6}]
},
{
username: "susy",
tags: [{id:1}, {id:4},{id:5}]
},
{
username: "tyson",
tags: [{id:3},{id:5}]
},
];
and my selected tags are
let tagIds = [7,5];
and I expect to receive a result as
users = [
{
username: "john",
tags: [{id:1}, {id:3},{id:5},{id:7}]
},
];
Upvotes: 0
Views: 366
Reputation: 191936
Filter the users, and then check that every id
is found in the tags of the user by using Array.some()
:
const users = [{"username":"john","tags":[{"id":1},{"id":3},{"id":5},{"id":7}]},{"username":"becky","tags":[{"id":1},{"id":7},{"id":6}]},{"username":"susy","tags":[{"id":1},{"id":4},{"id":5}]},{"username":"tyson","tags":[{"id":3},{"id":5}]}];
const tagIds = [7,5];
const result = users.filter(({ tags }) =>
tagIds.every(id =>
tags.some(t => t.id === id)
)
);
console.log(result);
Upvotes: 5