我应该使用哪个rxjs运算符从可观察的数组中获取值以根据对象属性进行过滤

时间:2018-10-29 17:28:01

标签: angular ngrx rxjs6

这个问题已经困扰了我几个星期了。我键入了通过http请求返回的可观察数组。这会将数组输出到控制台。我试图抓住每个项目并检查properties._hg_layer。 enter image description here

然后将ngrx状态选择器分配给Observable,然后传递给BehaviorSubject。这会发出数组,但不会让我得出数组内部的值。我尝试了每种可能的运算符组合。我无法确定我的问题是否与如何从服务中键入响应或我如何使用运算符有关。它不会让我访问数组的类型化成员。好像不知道数组对象的属性一样。
enter image description here

我尝试在订阅上分配对象的类型,但我也无法使它正常工作。

enter image description here

我们将不胜感激您提供的任何见解或帮助。非常感谢。

2 个答案:

答案 0 :(得分:1)

尝试一下:

this.featureSource.subscribe((features) => {
   // iterate here
   features.map((feature) => console.log(feature.properties));

   // or good ol'
   for (const feature of features) {
      console.log(feature.properties);
   }
})

此外,请记住您的take(2) will actually emit the features independently而不是数组。如果要继续使用该代码,则需要更改上面的代码片段以处理该项目(本质上就是按照您在地图中要做的事情进行操作)。

答案 1 :(得分:0)

最后,它获得了正确的映射顺序。我必须在初始map()中映射数组。然后将各个对象映射到订阅上。我通过以下方法解决了我的问题:

this.updatedLayers$.pipe(
  map((features: Feature[]) => features),
  )
  .subscribe(val => {
    setTimeout(() => {
      featureSubject.next(val.length);
      this.featureSource.next(val);
      console.log('feature data', val);
      val.map(feature => {
        console.log('type', feature.type);
        console.log('properties', feature.properties._hg_layer);
        });
      }, 500);
    });