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'
}