Я пытаюсь отфильтровать массив с помощью Set.has
следующим образом:
const input = [
{ nick: 'Some name', x: 19, y: 24, grp: 4, id: '19340' },
{ nick: 'Some name', x: 20, y: 27, grp: 11, id: '19343' },
{ nick: 'Some name', x: 22, y: 27, grp: 11, id: '19344' },
{ nick: 'Some name', x: 22, y: 30, grp: 11, id: '19350' },
{ nick: 'Some name', x: 22, y: 12, grp: 23, id: '19374' },
{ nick: 'Some name', x: 22, y: 29, grp: 23, id: '19377' }
];
const grpToOmit = [ 11, 23 ];
const groupToOmitSet = new Set(grpToOmit);
input.filter(it => {
console.info(groupToOmitSet.has(it.grp))
return !groupToOmitSet.has(it.grp);
});
console.info(input)
Поэтому я создаю коллекции уникальных значений из массива grpToOmit
, а затем проверяю их в функции фильтра.
Этот фильтр ничего не делает, и входной массив не меняется, хотя несколько раз console.info(groupToOmitSet.has(it.grp))
console true (я использую oposit в следующей строке).
.filter
создает новый массив, а не изменяет существующий. Вам нужно присвоить результат переменной.
const input = [
{ nick: 'Some name', x: 19, y: 24, grp: 4, id: '19340' },
{ nick: 'Some name', x: 20, y: 27, grp: 11, id: '19343' },
{ nick: 'Some name', x: 22, y: 27, grp: 11, id: '19344' },
{ nick: 'Some name', x: 22, y: 30, grp: 11, id: '19350' },
{ nick: 'Some name', x: 22, y: 12, grp: 23, id: '19374' },
{ nick: 'Some name', x: 22, y: 29, grp: 23, id: '19377' }
];
const grpToOmit = [ 11, 23 ];
const groupToOmitSet = new Set(grpToOmit);
const output = input.filter(it => {
return !groupToOmitSet.has(it.grp);
});
console.info(output)
причина
.filter
возвращает новый массив