首页 > 解决方案 > 同时支持更多字段的过滤功能

问题描述

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

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=agroup=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
  }

我该如何修改它(做类似valuewhich is a 的事情string[])?感谢您的时间!

标签: javascriptangular

解决方案


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

{
    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);


推荐阅读