角度过滤器对象数组用于多个值

时间:2019-01-29 14:10:49

标签: javascript angular typescript

我有以下方法可以过滤输入字段的对象(具有其他对象的数组):

  filterArray(): void {
    this.json.items.filter((e) => e.assignedPool != null || e.assignedPool !== undefined);
    this.json.items = this.json.items.filter((e) => e.name.includes(this.filter));
  }

现在我要过滤另一个变量。这是objecs层次结构:

过滤后的json变量:

export class VirtualServerResponse {
  private _kind: String;
  private _items: VirtualServer[];  

虚拟服务器:

  //...properties
  private _assignedPool: PoolDTO;

泳池:

  //properties
  private _membersReference: MembersReferenceDTO;

成员参考:

export class MembersReferenceDTO {
  constructor() {}
  private _link: String;
  private _isSubcollection: String;
  private _items: PoolMemberDTO[];

和一个PoolMember:

export class PoolMemberDTO {
  constructor() {}
  private _address: String;

现在,我希望也可以过滤PoolMember的地址,因此当filter与任何PoolMember的地址匹配时,类似

this.json.items.foreach((item) => 
item.assignedPool.membersReference.items.foreach(member) =>  
member.address == this.filter)

我要过滤json.items数组,因此该数组包含:

  • 所有名称与过滤器匹配的服务器
  • 所有分配了Pool成员地址的服务器都与过滤器匹配

有人可以在这里帮助我吗?

更新:

Server name: test server
Assigned pool -> membersReference ->items[]
items[0]: 10.10.10.2
items[1]: 10.10.10.3

... 因此,如果过滤器为10.10.10.3,则服务器“测试服务器”应位于json.items

1 个答案:

答案 0 :(得分:1)

我们可以检查memberReference项目以查看是否存在与过滤器匹配的地址。

filterArray(): void {
  this.json.items = this.json.items.filter((e) => 
    (e.assignedPool !== null && e.assignedPool !== undefined)
    && (e.name.includes(this.filter) || e.assignedPool.membersReference.items.find((m) => m.address === this.filter));
}