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)。
.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)