我需要用has和repo构造这个对象。我觉得嵌套这些地图是一种非常糟糕的做法,并且这是流程的失败点。这应该怎么写?如何避免嵌套循环
let observ = observable$.flatMap(repos => {
return Rx.Observable.from(repos.map(repo => ({hash: getHash(repo), repo})))
})
我需要用has和repo构造这个对象。我觉得嵌套这些地图是一种非常糟糕的做法,并且这是流程的失败点。这应该怎么写?如何避免嵌套循环
let observ = observable$.flatMap(repos => {
return Rx.Observable.from(repos.map(repo => ({hash: getHash(repo), repo})))
})
我没有看到任何明显的错误,这种方法。如果您想简化代码,则可以使用concatMap
,它将将数组流转换为项目流。然后我们可以做一个正常的地图:
let repo$ = observable$.concatMap(identity);
let observ = repo$.map(repo => ({hash: getHash(repo), repo }));
其中identity === x => x
。
如果您想避免使用identity
来调用它,则在构建observable$
流时,您也可以在您的链中早些时候应用concatMap
。
只有'flatmap(id)'类型为'Observable
雅你说得对;将很快更新我的答案。 –
我不知道RxJs,所以我不能说从社区的角度来看这是不是一个坏习惯,但我没有看到嵌套有什么问题。如果这让你感到困扰,为什么不把lambda转化为命名函数并将它们传递给'flatMap'和'map'? –
'repos','map'方法和'getHash'的类型是什么? – Bergi
@Bergi'repos'是一个'array',它的map是'array.prototype.map','getHash'是一个返回字符串的函数。 – ThomasReggi