首页 > 解决方案 > 多个值的角度过滤器对象数组

问题描述

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

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

现在我想过滤另一个变量。这是对象层次结构:

过滤后的 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数组,所以这个数组包含:

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

更新:

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

标签: javascriptangulartypescript

解决方案


我们可以检查 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));
}

推荐阅读