使用 set.has 进行过滤无法按预期工作

BT1*_*101 1 javascript arrays filter

我试图通过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.log(groupToOmitSet.has(it.grp))
  return !groupToOmitSet.has(it.grp);
});

console.log(input)
Run Code Online (Sandbox Code Playgroud)

因此,我从数组创建唯一值的集合grpToOmit,然后在过滤器函数中检查它。

该过滤器不执行任何操作,并且输入数组没有更改,尽管console.log(groupToOmitSet.has(it.grp))控制台 true 几次(我在下一行中使用 oposit)。

Nic*_*wer 5

.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.log(output)
Run Code Online (Sandbox Code Playgroud)