2016-03-15 132 views
0

我需要用has和repo构造这个对象。我觉得嵌套这些地图是一种非常糟糕的做法,并且这是流程的失败点。这应该怎么写?如何避免嵌套循环

let observ = observable$.flatMap(repos => { 
    return Rx.Observable.from(repos.map(repo => ({hash: getHash(repo), repo}))) 
}) 
+2

我不知道RxJs,所以我不能说从社区的角度来看这是不是一个坏习惯,但我没有看到嵌套有什么问题。如果这让你感到困扰,为什么不把lambda转化为命名函数并将它们传递给'flatMap'和'map'? –

+0

'repos','map'方法和'getHash'的类型是什么? – Bergi

+0

@Bergi'repos'是一个'array',它的map是'array.prototype.map','getHash'是一个返回字符串的函数。 – ThomasReggi

回答

0

我没有看到任何明显的错误,这种方法。如果您想简化代码,则可以使用concatMap,它将将数组流转换为项目流。然后我们可以做一个正常的地图:

let repo$ = observable$.concatMap(identity); 
let observ = repo$.map(repo => ({hash: getHash(repo), repo })); 

其中identity === x => x

如果您想避免使用identity来调用它,则在构建observable$流时,您也可以在您的链中早些时候应用concatMap

+0

只有'flatmap(id)'类型为'Observable > =>可观察',通常你没有可观察到的可观察物。在我看来,OP使用'Observable (Repo => List <{hash,repo}>)=> Observable <{hash,repo}>'类型的'flatmap',而不是可观察列表。 – Bergi

+0

雅你说得对;将很快更新我的答案。 –