#javascript #arrays #filter
Вопрос:
let array1 = [
{
id: 1,
genres: [
{ id: 4, title: "qqqq" },
{ id: 9, title: "zzzz" },
{ id: 8, title: "eeee" },
],
},
{
id: 2,
genres: [
{ id: 2, title: "qwert" },
{ id: 4, title: "asdf" },
{ id: 5, title: "zxxcc" },
],
},
];
let array2 = [6, 8];
Мне нужно отфильтровать массив1, если идентификатор жанра существует в массиве 2.
Поэтому на выходе у меня должен быть только первый элемент array1.
Как это сделать?
Ответ №1:
Вы можете использовать комбинацию из filter
, some
и includes
:
let array1 = [{id:1,genres:[{id:4,title:"qqqq" },{id:9,title:"zzzz"},{id:8,title:"eeee" }]},
{id:2,genres:[{id:2,title:"qwert"},{id:4,title:"asdf"},{id:5,title:"zxxcc"}]}];
let array2 = [6, 8];
let result = array1.filter(({genres}) => genres.some(({id}) => array2.includes(id)));
console.log(result);
Ответ №2:
Используйте эту filter
функцию.
Один из способов сделать это:
let result = array1.filter(el => {
let output = false;
el.genres.forEach( genre => {
if (array2.includes(genre.id))
output = true;
});
return output;
});
Комментарии:
1. Вы также можете добавить разрыв в цикле foreach, чтобы остановить его, если он уже соответствует значению.