我有一个具有以下模型结构的对象列表:
export class Animal{
public aniId: number;
public aniName: string;
}
export Class Zoo{
public id: number;
public name:string;
public aniId: number;
}
我有一个Zoo
对象的列表,其中包含一个Id for Animal object
,如下所示。
[{ “ id”:4343, “ name”:“加拿大”, “ aniId”:1000 }, { “ id”:12121, “名称”:“中国”, “ aniId”:78 }, { “ id”:4143, “ name”:“俄罗斯”, “ aniId”:58 } ] 我的问题:如果我有动物对象的列表,如何检索包含动物的相应动物园的列表。
例如:如果我发送的动物名单中包含IDS为1000和58的动物,我应该得到IDS为4343和4143的动物园的列表。
注意:我尝试使用过滤器,但无法获得输出。
allZoo = this.zooList.filter(x=> x.aniId === this.animalList); <-- Issue here
答案 0 :(得分:0)
要使其正常运行,您可以按以下方式更改过滤器逻辑
allZoo = this.zooList.filter(x => this.animalList.find(animal => animal.aniId === x.aniId) != null)
它的作用是尝试从animalList
中查找与aniId
中的动物zooList
相匹配的动物
答案 1 :(得分:0)
您可以执行以下操作:
this.zooList = [{ "id": 4343, "name": "Canada", "aniId": 1000 }, { "id": 12121, "name": "China", "aniId": 78 }, { "id": 4143, "name": "Russia", "aniId": 58 } ];
this.animalList = [{aniId:1000}, {aniId:58}];
const res = this.animalList.map(animal => {
return this.zooList.filter(zooAnimal => {
return zooAnimal['aniId'] === animal['aniId'];
});
});
// one-liner :
// const res = this.animalList.map(animal => this.zooList.filter(zooAnimal => zooAnimal['aniId'] === animal['aniId']));
console.log(res);
基本上,您遍历animalList
,然后zooList
将过滤出具有匹配的aniId
的动物对象。
答案 2 :(得分:0)
这对我有用。
export class Animal{
aniId: number;
aniName: string;
}
export class Zoo{
public id: number;
public name:string;
public aniId: number;
}
let myZoo:Array<Zoo> =[{ "id": 4343, "name": "Canada", "aniId": 1000 }, { "id": 12121, "name": "China", "aniId": 78 }, { "id": 4143, "name": "Russia", "aniId": 58 } ] ;
let myAnimal:Array<Animal> =[{"aniId":1000,"aniName":"ani1"}];
let myZooList:Array<Zoo> = myZoo.filter(x => myAnimal.filter(y=> y.aniId===x.aniId).length>0);
console.log(myZooList);