Observable.flatMapそのような目的のために作られています(fiddle):
// turn products into array
var arr = [];
for(var key in products) {
  arr.push(products[key]);
}
Rx.Observable.from(arr)
  .flatMap(x => {
    // 'x' is like object ID1, create array of products
    var arr = [];
    for (var key in x) {
      arr.push(x[key]);
    }
    return Rx.Observable.from(arr);
  })
  .subscribe(x => document.write(JSON.stringify(x) + '</br>'));
出力:
{"name":"Car"}
{"name":"Door"}
{"name":"Glass"}
{"name":"Sandwich"}
{"name":"Pen"}
キーをどのように処理するかはわかりませんが、 を使用Observable.pairsして、オブジェクトのプロパティをさらに簡単にループすることができます。結果のストリームは、最初の要素がキーで、2 番目の要素がオブジェクト プロパティの値である配列です。
Rx.Observable.pairs(products)
    .flatMap(x => Rx.Observable.pairs(x[1]))
    .subscribe( x => console.log(x[0], x[1]));
これは、次のような配列を返します。
["prodID1", {name: "Car"}]
["prodID2", {name: "Door"}]
["prodID3", {name: "Glass"}]
["prodID4", {name: "Sandwich"}]
["prodID5", {name: "Pen"}]