I have the following arrays:
const tasks = [
{id: 0, name: 'a', tags: [{id: 0, name: 'q'}, {id: 7, name: 'i'}]},
{id: 1, name: 'b', tags: [{id: 2, name: 'e'}, {id: 4, name: 't'}, {id: 2, name: 'e'}, {id: 0, name: 'q'}]},
{id: 2, name: 'c', tags: []},
{id: 3, name: 'd', tags: [{id: 7, name: 'i'}, {id: 3, name: 'r'}, {id: 0, name: 'q'}]},
{id: 6, name: 'g', tags: [{id: 7, name: 'i'}, {id: 4, name: 't'}]},
]
const tags = [
{id: 0, name: 'q'},
{id: 1, name: 'w'},
{id: 2, name: 'e'},
{id: 3, name: 'r'},
{id: 4, name: 't'},
{id: 7, name: 'i'},
{id: 11, name: 's'}
]
let selectedTags = [0, 5]
selectedTags is an Array of indexes of tags Array. Now I need to find all objects in tasks Array, where property tags includes ALL of the selected tags. So in this case the output should be:
let result = [
{id: 0, name: 'a', tags: [{id: 0, name: 'q'}, {id: 7, name: 'i'}]},
{id: 3, name: 'd', tags: [{id: 7, name: 'i'}, {id: 3, name: 'r'}, {id: 0, name: 'q'}]}
]
I tried to do something like this:
let result= []
_.forEach(selectedTags, index => {
const tagId = tags[index]._id
result = _.filter(tasks, task => _.find(task.tags, ['_id', tagId]))
})
But the result array included objects where tags array had only one of the selected tags (always the same tag).
Any ideas, please?
resultgets overwritten in the forEach loop (that would explain why its always the same/last tag that works)[0, 5]but your expected results doesn't have 5, it has 7, is this a typo.?5from thetagsarray