Как отфильтровать объекты? Find, some

Есть массивы объектов item, first, second. Item - общий пул сущностей, first - карточки из общего пула отфильтрованные по первому фильтру, second - аналогично first, только отфильтровано все по второму фильтру. Мне надо создать новый массив и внести в него объекты, которые отфильтрованы одновременно по двум фильтрам. Сижу битый час, ничего не получится, прошу о помощи. Единственное до чего дошла :

let check = item.find((card) => first.includes(card)? first : null || second.includes(card)? second : null);

И оно не работает


Ответы (2 шт):

Автор решения: vsemozhebuty

Если везде одни и те же объекты, а не их копии, тогда вроде бы достаточно так:

const firstAndSecond = first.filter(item => second.includes(item));
→ Ссылка
Автор решения: Qwertiy

Во-первых, лучше было сделать одну фильтрацию и всё раскидать по 3 массивам сразу:

var first = [], second = [], both = []

for (var x of items) {
  var a = f1(x), b = f2(x)

  if (a) {
    first.push(x)
    b && both.push(x)
  }

  b && second.push(x)
}

Если так нельзя, то с линейной асимптотикой делается так:

var b = new Set(second)
var both = first.filter(x => b.has(x))

Если массив небольшой и устраивает (или предпочтительна) квадратичная асимптотика, то можно

var both = first.filter(x => second.includes(x))
→ Ссылка