地图&使用observabes过滤

时间:2017-07-30 21:38:10

标签: javascript angular

我有一个observable,它返回一个对象数组,如:

0:Object
    id:1
    id_room:1
1:Object
    id:2
    id_room:1
2:Object
    id:3
    id_room:1

我正在尝试使用find方法来查找例如id = 1的对象,所以:

getPlaceByPlaceId(placeId: number)  {
 return this.placesService.getPlaces()
   .map( place => place)
   .filter( x => x.id === 1)
   .subscribe(
    x => { 
      console.log(x);
    },
    err => {
      console.log(err);
    }
   );

我的服务方法getPlaces:

getPlaces(): Observable<Place> {
    return this._http
      .get('./../../assets/api/places.json')
      .map((res: Response) => res.json());
  }

..和places.json:

[{
      "id": 1,
      "id_room": 1
  }, {
      "id": 2,
      "id_room": 1
  }, {
      "id": 3,
      "id_room": 1
  }
]

不幸的是我不知道我做错了什么。 Console.log没有显示任何错误。

1 个答案:

答案 0 :(得分:0)

您的filter()一次性获取整个数组,因此尝试过滤array.id不起作用,因为整个数组没有id属性。您需要将map个元素输出到filter函数,您可以在其中测试每个元素。

而不是.filter( x => x.id === 1)我认为你想要:

.map(item => item.filter( x => x.id === 1))

这应生成一个新数组,其中只包含与id === 1匹配的项目。