从另一个列表中过滤一个列表以检索公共对象

时间:2019-04-10 02:08:50

标签: angular typescript

我有一个具有以下模型结构的对象列表:

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

3 个答案:

答案 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);