У меня есть массив, в котором я храню идентификаторы объектов.Я перебираю все объекты, чтобы найти те, которые содержат идентификаторы из массива.Если я выберу несколько флажков, я получу каждый объект, содержащий любой идентификатор из массива.Но цель состоит в том, чтобы получить только те объекты, которые содержат все выбранные.
мой код:
this.state.filterSelected: ["231", "232", "130"]
data = [
{
title: 'title one'
id: ['130', '231', '232']
}
{
title: 'title two'
id: ['130', '231', '232', '233']
}
{
title: 'title three'
id: ['130', '231']
}
]
const checkbox = () => {
let base = [];
for (let i = 0; i < this.state.filterSelected.length; i++) {
let foo = data.filter(article =>
article[property]
? article[property].includes(this.state.filterSelected[i])
: null
);
base.push(foo);
}
let uniqueObj = [...new Map(base.flat().map(o => [o.id, o])).values()];
this.setState({ print: uniqueObj });
};
Я хочу получить только объект с 'title one' и 'title two', который содержит все filterSelected.
последнее обновление:
if(e.target.getAttribute('vocabulary') === 'tags'){
property = 'tags_array';
}
if(e.target.getAttribute('vocabulary') === 'type'){
property = 'types_array';
}
if(e.target.getAttribute('vocabulary') === 'related'){
property = 'related_to_array';
}