Как отфильтровать объекты? 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 шт):
Если везде одни и те же объекты, а не их копии, тогда вроде бы достаточно так:
const firstAndSecond = first.filter(item => second.includes(item));
Во-первых, лучше было сделать одну фильтрацию и всё раскидать по 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))