Какой оператор rxjs я должен использовать, чтобы получить значения из наблюдаемого массива для фильтрации на основе свойства объекта - PullRequest
0 голосов
/ 29 октября 2018

Я уже пару недель ломаю голову над этой проблемой. Я набрал наблюдаемый массив, возвращаемый через HTTP-запрос. Это вывод массива на консоль. Я пытаюсь захватить каждый элемент и проверить properties._hg_layer. enter image description here

Затем селектор состояния ngrx назначается для Observable, а затем передается в BehaviorSubject. Это испускает массив, но не позволяет мне получить значения внутри массива. Я перепробовал все мыслимые комбинации операторов. Я не могу сказать, связана ли моя проблема с тем, как набирается ответ, исходящий из службы, или как я использую операторов. Это не позволит мне получить доступ к типизированным членам массива. Это как если бы он не знал свойств объектов массива.
enter image description here

Я попытался назначить тип объекта в подписке, и я тоже не могу заставить его работать.

enter image description here

Буду очень признателен за любую информацию или помощь, которую вы сможете оказать. Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

В итоге получился правильный порядок отображения. Мне пришлось сопоставить массив в исходной карте (). Затем сопоставьте отдельные объекты в подписке. Я решил свою проблему следующим образом:

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);
    });
0 голосов
/ 29 октября 2018

Попробуйте это:

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) будет на самом деле излучать функции , а не в виде массива. Если вы продолжите использовать это, приведенный выше фрагмент кода нужно будет изменить, чтобы обработать элемент (по сути, просто делать то, что вы делаете на карте).

...