我有此功能可以过滤元素。例如,如果我有以下数组:
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
}
如何修改它(做类似value
的{{1}}之类的事情)?谢谢您的时间!
答案 0 :(得分:2)
您可以将一个对象用作所需的过滤器
{ 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);
答案 1 :(得分:0)
尝试一下:
this.newArray = items.filter(
singleItem => singleItem && singleItem.name === 'a' && singleItem.group === 'aa'
);