You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何展平rxjs from生成的嵌套Observable,订阅时得到扁平化数组

代码调整方案

原有代码存在3处错误:

  • 元素判断逻辑错误:item || from(item) 逻辑不成立,非数组类型的原始值(如数字1、2)会直接被返回,不符合mergeMap要求返回Observable的规则
  • 运算符位置错误:toArray() 是独立的管道操作符,不能作为mergeMap的参数传入
  • 语法错误:pipe、subscribe的闭合括号缺失,代码无法正常运行

修改后的可运行代码如下:

import { from, of } from 'rxjs';
import { mergeMap, toArray } from 'rxjs/operators';

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

代码逻辑说明:

  • 用Array.isArray判断当前流元素是否为数组,数组元素用from转为Observable逐个发射内部元素,非数组元素用of包装为Observable返回
  • mergeMap会将所有内部Observable发射的值打平输出到主流程
  • toArray会收集主流程发射的所有单个值,组合为数组后传递给订阅回调,最终输出期望的展平数组[1,2,3,4,5,6]

内容的提问来源于stack exchange,提问作者Benjamin McFerren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 07:36:03