javascript - 同时支持更多字段的过滤功能
问题描述
我有这个过滤元素的功能。例如,如果我有这个数组:
arr = [{'name': 'a', 'group': 'aa'}, {'name': 'b', 'group': 'bb'}, {'name': 'c', 'group': 'cc'}, {'name': 'a', 'group': 'dd'}]
我过滤它'name=a'
,它会返回我
{'name': 'a', 'group': 'aa'}
{'name': 'a', 'group': 'dd'}
但是我怎么能设置另一个条件,而不仅仅是name
. 例如,我想在 and 之后搜索name=a
并group=aa
返回:
{'name': 'a', 'group': 'aa'}
这是我的功能,但它目前只接收一个字段
transform(items: any[], field: string, value: string[]): any[] {
if (!items) {
return [];
}
if (!field || !value || value.length <= 0) {
return items;
}
this.newArray = items.filter(singleItem => {
return (singleItem != null && singleItem[field] != null && singleItem[field] != undefined && value.indexOf(singleItem[field]) >= 0);
});
return this.newArray
}
我该如何修改它(做类似value
which is a 的事情string[]
)?感谢您的时间!
解决方案
您可以为想要的过滤器取一个对象
{ name: 'a', group: 'aa' }
并通过检查对象的值来迭代这个键/值。
这种方法接受任意数量的属性。
var array = [{ name: 'a', group: 'aa' }, { name: 'b', group: 'bb' }, { name: 'c', group: 'cc' }, { name: 'a', group: 'dd' }],
filter = { name: 'a', group: 'aa' },
result = array.filter(o => Object.entries(filter).every(([k, v]) => o[k] === v));
console.log(result);
推荐阅读
- spring-boot - 内存数据库中的 Springboot H2 - 无法连接
- github - 可以在没有沙箱的情况下使用 GitHub Actions 自托管运行器吗?
- r - 如何在 Rstudio 云中通过命令行暂存、提交和推送大量更改到 GitHub?
- scala - class.getResource 从测试资源返回 null
- php - Laravel 6.x 关系 hasOne 本身带有密钥
- javascript - Tomcat websocket 代码在 localhost 上成功,但在为远程主机托管和修改时失败
- amazon-web-services - Amazon Linux httpd 重定向到 www 不起作用
- javascript - 如何在 Google Script 中制作弹出框
- r - using regular expressions (regex) to make replace multiple patterns at the same time in R
- python - 安装包 googleclient 和 fastavro 时遇到问题