Javascript 同时支持多个字段的筛选函数

Javascript 同时支持多个字段的筛选函数,javascript,angular,Javascript,Angular,我有一个过滤元素的函数。例如,如果我有这个数组: 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'} 但是我如何才能设置另一个条件,而不

我有一个过滤元素的函数。例如,如果我有这个数组:

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
。例如,我想搜索
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
  }
transform(项:any[],字段:string,值:string[]):any[]{
如果(!项){
返回[];
}
如果(!field | |!value | | value.length{
return(singleItem!=null&&singleItem[field]!=null&&singleItem[field]!=undefined&&value.indexOf(singleItem[field])>=0;
});
返回此.newArray
}
如何修改它(执行类似于
字符串[]
值的操作)?谢谢你抽出时间

试试这个:

this.newArray = items.filter(
  singleItem => singleItem && singleItem.name === 'a' && singleItem.group === 'aa'
);

你可以为想要的过滤器取一个对象

并通过检查对象的值来迭代该键/值

这种方法接受任意数量的属性

var数组=[{name:'a',group:'aa'},{name:'b',group:'bb'},{name:'c',group:'cc'},{name:'a',group:'dd'}],
筛选器={name:'a',group:'aa'},
result=array.filter(o=>Object.entries(filter).every([k,v])=>o[k]==v));

控制台日志(结果)
在您的示例中,
字段
将设置为什么,值
将设置为什么?
{name:'a',group:'aa'}
对不起,这是@user184994将设置的内容。因此字段
name
group
和值
a
aa
。如果我执行此筛选函数的原因是查找
filter
的值,那么如何构建
过滤器
数组?
filter
是一个对象,您可以仅使用a。对不起,我刚刚意识到我说的是一个多么大的错误。你是对的,我现在就检查一下。我有一个问题,如果
a
被分配给了更多的组,我希望过滤器是这样的:
filter={name:'a',group:'aa',group:'gg}
。我不能复制
。你能帮帮我吗,@NinaScholz?你可以拿一个数组,用
.each([k,v])=>array.isArray(v)?v.包括(o[k]):o[k]==v))
{
    name: 'a',
    group: 'aa'
}