2016-09-28 83 views
0

我現在有輸入看起來如下如何使用RxJS運營商

const config = { 
    'mainA': { sub1: { name: 'test1'}, sub2: { name: 'test2'}}, 
    'mainB': { sub1: { name: 'test3'}, sub2: { name: 'test4'}} 
}; 

我試圖寫一個函數(createCustomObservable),這將使用標準RsJS運營商創建一個可觀察到的創建自定義對象的可觀察到的流如下

var observable = createCustomObservable(config); 
observable.subscribe((x) => console.log(x)); 

控制檯輸出應如下所示

{'mainA': 'test1'} -> {'mainA': 'test2'} -> {'mainB': 'test3'} -> {'mainB': 'test4'} 

一系列單個物體的物體

有沒有人有任何想法如何使用RxJS運營商實現這一點?任何幫助,將不勝感激。

回答

2

你試圖解決的主要問題是遍歷對象以獲取包含「name」字段的所有對象,並獲取它們的值。

有沒有的Rx操作自動做到這一點,所以要實現這個任務,你可以簡單地使用Rx.Observable.create - https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/create.md

const config = { 
'mainA': { 
    sub1: { 
     name: 'test1' 
    }, 
    sub2: { 
     name: 'test2' 
    } 
}, 
'mainB': { 
    sub1: { 
     name: 'test3' 
    }, 
    sub2: { 
     name: 'test4' 
    } 
} 
}; 


function traverse(o, func) { 
    for (var i in o) { 
     func.apply(this, [i, o[i]]); 
     if (o[i] !== null && typeof(o[i]) == "object") { 
      //going on step down in the object tree!! 
      traverse(o[i], func); 
     } 
    } 
} 

var source = Rx.Observable.create(function(observer) { 

    traverse(config, function(key, value) { 
     if (key == "name") 
      observer.onNext(value); 
    }); 

    observer.onCompleted(); 
    return function() { 
     console.log('disposed'); 
    }; 
}); 

source.subscribe(function(next) { 
    console.log(next); 
}) 

樣品:https://jsbin.com/yolufovubi/edit?js,console