javascript - 带有 set.has 的过滤器无法按预期工作
问题描述
我正在尝试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)
grpToOmit
所以我从数组中创建唯一值的集合,然后在过滤器函数中检查它。
这个过滤器没有做任何事情,并且输入数组没有改变,尽管console.log(groupToOmitSet.has(it.grp))
控制台为真几次(我在下一行使用了 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)
推荐阅读
- c++ - 我正在尝试“构建并运行”一个 c++ 项目 main.cpp,但出现以下编译器错误
- php - PHP 中的字符串比较没有意义……
- asp.net-mvc - 在 MVC 5 Razor 页面中实现 bootstrap.chosen
- http - 支持 Heroku 通用运行时基础的 Heroku DNS 配置返回错误
- tinymce - 上下文菜单中的 TinyMCE 图像选项未显示
- java - 为什么我的共同偏好显示不同的值?
- javascript - Chrome 扩展程序:在同一台计算机中跨多个 chrome 配置文件进行通信/调用操作
- model-checking - Broker模式CCS建模和Mu演算规范
- api - 关于 Flutter/Dart 中的 JSON 解码:复杂的 JSON API 转化为模型
- python - 混合水平和垂直刻度