2016-09-21 5 views
1

Мне нужно получить подмножество из списка firebase. Скажем, у меня есть два набора:Запрос подмножества от angularfire2

set1 = { 
    dog:true, 
    cat:true, 
    snake:true, 
    bull:true 
} 

и

set2 = { 
    dog:true, 
    cat:true 
} 

Что мне нужно, чтобы получить «в set1, но не в set2», в этом случае она будет возвращать:

setresult = { 
    snake:true, 
    bull:true 
} 

Я пытался добиться этого с картой:

this.setresult = this.af.database.list('/set2/').map((animals) => { 
     return animals.map((animal) => { 
      if (auth.uid == _user.$key || af.database.object('set2/' + animal.$key) == null) {} 
      else { 

       return af.database.object('set1/' + animal.$key); 
      } 
     }) 
    }) 

Но в итоге я получаю список с нулями, и мне нужен только набор результатов.

Заранее спасибо.

ответ

0

Вы можете использовать оператор combineLatest сочинить наблюдаемый, излучающий объект, содержащий ключи/значение из set1, которые не являются в set2:

import * as Rx from "rxjs/Rx"; 

let set = Rx.Observable.combineLatest(

    // Combine the latest values from set1 and set2 
    // using AngularFire2 object observables. 

    this.af.database.object('/set1/'), 
    this.af.database.object('/set2/'), 

    // Use the operator's project function to emit an 
    // object containing the required values. 

    (set1, set2) => { 
     let result = {}; 
     Object.keys(set1).forEach((key) => { 
      if (!set2[key]) { 
       result[key] = set1[key]; 
      } 
     }); 
     return result; 
    } 
); 

set.subscribe((set) => { console.log(set); }); 
+0

, пример работает отлично, но по какой-то причине я могу» t вывести результат в корзину, представление (используя ngFor и async pipe), используя: '

  • {{item.name}}
  • ' Я получаю Не могу найти отличающийся поддерживающий объект «объект объекта» типа «объект». NgFor поддерживает только привязку к Iterables, например массивы. –

    +0

    Если пример ответа работает, но у вас возникли проблемы с отображением результата в представлении, было бы лучше, если бы вы создали другой вопрос, включающий в себя компонент, шаблон и составную наблюдаемую. Другим будет легче помочь вам. Тем более, что вы уже приняли этот ответ. – cartant

    +0

    ОК, я скопирую этот вопрос и спрошу другого, ty @cartant –

    Смежные вопросы