Angular Typescript使用filter()筛选数组

Angular Typescript使用filter()筛选数组,angular,typescript,Angular,Typescript,我有下面的约定列表,我想按专业筛选该列表,即当我输入15时,它返回id为1和2的约定 [ { "id": 1, "typeActivities": [ { "id"=11, "specialitiesId": [10, 15] } ] }, { "id": 2, "typeActivities": [ { "id"=22, "specialitiesId": [

我有下面的约定列表,我想按专业筛选该列表,即当我输入15时,它返回id为1和2的约定

[
 {
   "id": 1,
   "typeActivities": [
      {
        "id"=11,
        "specialitiesId": [10, 15]
      }
   ]
 },
 {
   "id": 2,
   "typeActivities": [
      {
        "id"=22,
        "specialitiesId": [10]
      },
      {
        "id"=222,
        "specialitiesId": [15]
      }
   ]
 },
 {
   "id": 3,
   "typeActivities": [
      {
        "id"=33,
        "specialitiesId": [12]
      }
   ]
 }
]
我尝试使用此函数,但没有返回任何结果

let input: number = 15;
let convention: Convention[];
convention = this.conventions.filter(convention => {
    let typeActivities: TypeActivity[] = convention.typeActivities.filter(typeActivitiy => {
        if (typeActivitiy.specialitiesId) {
            return input == typeActivitiy.specialitiesId.find(id => id == input);
        }
    });
    //console.log(convention.typeActivities.map(i => i.id).filter(item => typeActivities.map(i => i.id).indexOf(item) >= 0));
});
对于以下情况非常有用:

let input: number = 15;
let convention: Convention[];
convention = this.conventions.filter(convention =>
    convention.typeActivities.some(activity =>
        activity.specialitiesId.some(e => e == input)
    )
);
convention.typeActivities.some(…)
将使用每个条目调用其谓词,直到其用完(
some
返回
false
)或谓词返回真实值(
some
返回
true
);与
activity.specialitesid.some(…)
相同

实时JavaScript示例:

const示例={
公约:[
{
“id”:1,
“类型活动”:[
{
“id”:11,
“专业ID”:[10,15]
}
]
},
{
“id”:2,
“类型活动”:[
{
“id”:22,
“专业ID”:[10]
},
{
“id”:222,
“专业ID”:[15]
}
]
},
{
“id”:3,
“类型活动”:[
{
“id”:33,
“专业ID”:[12]
}
]
}
],
查找(输入){
让公约;
约定=this.conventions.filter(约定=>
约定.typeActivities.some(活动=>
activity.specialitesid.some(e=>e==input)
)
);
返回约定;
}
};
log(例如,find(15))
。作为控制台包装器{
最大高度:100%!重要;
}