Arrays 如何在嵌套数组中过滤JSON对象数组

Arrays 如何在嵌套数组中过滤JSON对象数组,arrays,json,angular,typescript,Arrays,Json,Angular,Typescript,我有一个对象数组,并根据属性名“username”对其进行过滤,如下所示 array = [{ "id": 1, "username": "admin", "roles": [{ "name": "Administrator" }, { "name": "agent" } ] }, { "id": 2, "username": "admin2",

我有一个对象数组,并根据属性名“username”对其进行过滤,如下所示

array =   [{
    "id": 1,
    "username": "admin",
    "roles": [{
            "name": "Administrator"
        },
        {
            "name": "agent"
        }
    ]
},
{
    "id": 2,
    "username": "admin2",
    "roles": [{
            "name": "Administrator2"
        },
        {
            "name": "agent2"
        }
    ]
},
{
    "id": 3,
    "username": "admin3",
    "roles": [{
            "name": "Administrator3"
        },
        {
            "name": "agent3"
        }
      ]
    }
  ]
过滤函数是这样的

  transform(array: any, valueToSearch: string): any[] {

      return array.filter(e => 
       e.username.toLowerCase().indexOf(valueToSearch.toLowerCase()) 
       !== -1);

     }
一切正常,但现在我想根据对象中“角色”数组中的属性名“name”进行筛选。例如,我想返回一个对象,其“roles”数组包含“name”=agent3,因此它应该返回位于示例中最后一个位置的整个对象。我试着

return agents.filter(e => e.roles.filter(ee => 
       ee.valueToSearch.toLowerCase()) !== -1));
但它不起作用

这是dmeo

myarray=[{
“id”:1,
“用户名”:“管理员”,
“角色”:[{
“名称”:“管理员”
},
{
“名称”:“代理人”
}
]
},
{
“id”:2,
“用户名”:“admin2”,
“角色”:[{
“名称”:“管理员2”
},
{
“名称”:“代理2”
}
]
},
{
“id”:3,
“用户名”:“admin3”,
“角色”:[{
“名称”:“管理员3”
},
{
“名称”:“agent3”
}
]
}
];
函数myFunction(){
var filtered=myarray.filter((obj)=>{
返回obj.username.match(新的RegExp(document.getElementById('search')。值,'ig');
});
console.log(过滤);
};

根据您在问题中给出的示例,我能够像这样更改您现有的功能,我希望这是您的要求

  ngOnInit() {
    this.transform(this.array,'agent3');
  }

  transform(array: any, valueToSearch: string): any[] {
    return  this.array.filter(e => {
        e.roles.filter(ee => {
          if(ee.name.toLowerCase() === valueToSearch.toLowerCase() ) {
            console.log(e);
            this.finalResult = e;
          }
        })
      })
  }

Working Stackblitz:

在您前面提到的示例中,
valueToSearch
参数值是否为
agent3
?您的代码工作正常,但我想要一个过滤场景,而不是搜索场景,它只在整个单词匹配时返回对象。但我希望当用户键入一个单词时,它会开始比较并返回场景i中的适当值need@RazaEllahi,这是否是您的期望值??如果您键入username,它将过滤数据并显示与username相关的对象。我想在“角色”数组中按“名称”属性搜索我需要的场景