2016-11-07 1 views
0

Я начну с добавления кода, результата, который я получу, и в конце концов хочу получить, и если это возможно.Angular2 filter array of objects

Результат, который я получаю Array [объект, объект, ...], где объект Массив

export class SomeService { 
      .... 
      .... 
    public someFunction(): MyObject[]{ 
     Observable 
      .forkJoin(this.userItemsA(userId), this.userItemsB(userId), etc) 
      .filter(each => { 
         for (let array of each) { 
          let x: any = <any> array; 
           return x.length > 0; 
          } 
         }) 
      .map(result => { 
        return result; 
       }) 
      .subscribe(result => { 
        /// what i would like to do for example assuming only 1st array has items 
        /// do something here with result[0] 
        /// return MyObject[] from result[0] 
     }); 
    .... 
    } 
} 

структура фильтра

filter structure

Я м на ранней стадии обучения angular2 и реактивного программирования, я бы хотел фильтровать так, чтобы результатом карты были только массивы, имеющие по крайней мере 1 элемент.

Спасибо

+1

Какова структура ваших данных в '.filter (each => ...'? – martin

+0

Я загрузил структуру фильтра, thx – Remus

ответ

1

.filter Вместо использования .map

.map(each => { 
    return each.filter(array => array.length > 0) 
} 
1

К сожалению, это не работает с forkJoin. Что он делает, он объединяет несколько Observables в одиночный Наблюдаемый, поэтому, если какой-либо из них отфильтровывается, весь объединенный прерыватель get прерывается/фильтруется.

Как заявил @Martin, вы должны сделать свою фильтрацию в ветке map.