如何平嵌套的可观察对象,从RXJS



我想从([1,2,3,[4,5],6])的嵌套rxjs开始,并在订阅时以扁平数组结束。即:(1、2、3、4、5、6]

这是我的尝试

from([1,2,3,[4,5],6]).pipe(
mergeMap(
item => item || from(item),
toArray()
).subscribe(res => console.log("res", res)
) // want to print [1,2,3,4,5,6]

效果很好。

from([1,2,3,[4,5],6]).pipe(
mergeMap(
item => typeof item === 'number' ? of(item) : of(...item)
),
toArray()
).subscribe(res => console.log("res", res))

我不确定这是否是最好的解决方案。

下面是使用SCAN的工作解决方案

import { from, scan } from 'rxjs';

from([1, 2, 3, [4, 5], 6])
.pipe(
scan((a, c) => { 
return Array.isArray(c) ? [...a, ...c ] : [...a, c ]} , []
),
last()
).subscribe((res) => console.log('res', res));

https://stackblitz.com/edit/rxjs-vnhxza?file=index.ts

我们也可以使用Array.prototype.flat(除非我们需要IE支持):

from([1, 2, 3, [4, 5], 6])
.pipe(
// Will wait wait until last array element and it will emit the whole array
toArray(),
// Array.prototype.flat will flat an array (supported in all browsers except IE)
map(a => a.flat())
).subscribe((res) => console.log('res', res));

相关内容

  • 没有找到相关文章

最新更新