在地图中的 GroupedObservable 上使用订阅

2024-02-24

我有一个如下所示的对象数组:

private questions: Question[] = [
    {
        title: "...",
        category: "Technologie",
        answer: `...`
    },
    {
        title: "...",
        category: "Technologie",
        answer: `...`
    },
    {
        title: "...",
        category: "eID",
        answer: `...`
    }
];

我想按类别对它们进行分组,根据值过滤它们并将结果作为数组返回。目前,我正在使用这个:

Observable
    .from(this.questions)
    .groupBy(q => q.category)
    .map(go => 
    {
        let category: Category = { title: go.key, questions: [] };

        go.subscribe(d => category.questions.push(d));

        return category;
    })
    .filter(c =>  c.title.toLowerCase().indexOf(value.toLowerCase()) >= 0 || c.questions.filter(q => q.title.toLowerCase().indexOf(value.toLowerCase()) >= 0).length > 0)
    .toArray()

这会找到具有类别标题中的值的问题,但不会找到具有问题标题中的值的问题。我想那是因为我正在使用subscribe in map,因此,这些问题在filter方法,所以我想知道是否有可能等待subscribe在进入之前结束filter。我的研究指出flatMap但我无法让它做我想做的事。

EDIT

我发现我可以这样解决这个问题:

Observable
    .from(this.questions)
    .filter(q =>  q.category.toLowerCase().indexOf(value.toLowerCase()) >= 0 || q.title.toLowerCase().indexOf(value.toLowerCase()) >= 0)
    .groupBy(q => q.category)
    .map(go => 
    {
        let category: Category = { title: go.key, questions: [] };

        go.subscribe(d => category.questions.push(d));

        return category;
    })            
    .toArray()

但我仍然对答案感兴趣。


当您使用 groupBy 时,您会得到一个分组的可观察量,可以使用 concatMap、mergeMap、switchMap 等运算符进行扁平化。在这些运算符中,可以针对每个类别单独转换分组的可观察量,即将问题一起收集到一个带有 reduce 的数组中,并且然后用地图创建所需的对象。

   Observable
        .from(questions)
        .groupBy(q => q.category)
        .mergeMap(go => {
            return go.reduce((acc, question) => { acc.push(question); return acc; }, [])
                .map(questions => ({ title: go.key, questions }));
        })
        .filter(c => "...")
        .toArray()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在地图中的 GroupedObservable 上使用订阅 的相关文章

  • 如果 observable 在 X 时间内没有发出值,则会产生副作用

    我正在研究一个用例 要求如果可观察量在一定时间内没有发出值 那么我们应该做一些副作用 给出一个实际用例 打开网络套接字连接 如果在 X 时间内没有发送 接收消息 则关闭 Web 套接字连接并通知用户 这需要在每个发出的值上以及在初始订阅可观
  • RxJs 将流拆分为多个流

    如何根据分组方法将永无止境的流拆分为多个结束的流 a a a a a b b b b c c c c d d d e gt 到这些可观察到的 a a a a a b b b b c c c c d d d e gt 如您所见 a是在开始的时
  • 立即开始首次调用 IntervalObservable

    我正在使用一个IntervalObservable连续调用我的应用程序的服务器端 我可以订阅和取消订阅 Oberservable 一切正常 但有一个例外 对服务器的第一次调用会延迟 但我希望它是即时的 该人的行为IntervalObserv
  • 为什么rxjs不取消我的承诺?

    我在用rxjs in my angular应用程序 当多个数据时 我并不总是按照我想要的顺序取回数据REST已拨打电话 控制器 constructor rx Observable fromPromise this getExpenses t
  • Angular 6 observables - 从 .subscribe() 函数中提取数据并在其他地方使用

    我用可观察到的东西把头撞在墙上 我能找到的几乎所有文档都是较旧的rxjs句法 我有一个可观察的 API 调用 我在其他地方调用它并订阅它 尝试用此数据填充表GET要求 如果我简单地console log my getData函数 它记录订阅
  • Rxjs 主题下一个或 onNext

    我对 rxjs 很陌生 请耐心等待 例如在本教程中http blog angular university io how to build angular2 apps using rxjs observable data services
  • Angular 模板中可观察对象上的 ObjectUnsubscribedErrorImpl

    我正在使用 Angular 11 并且正在使用以下命令访问组件模板中的可观察对象async pipe 路线的第一次加载 一切都工作得很好 没有错误 当我离开该页面并返回时 出现以下错误 组件模板 成分 import Component On
  • 两个可观察量之间的差异

    假设我有两个可观察值 第一个可观察到的是某些列表的数组 id zzz other props here id aaa id 007 and more over time 第二个可观察对象是一组被忽略的列表 id 007 only id no
  • 如何从类似于 Angular 中的 http 的静态数据创建一个 Observable?

    我有一个具有此方法的服务 export class TestModelService public testModel TestModel constructor Inject Http public http Http public fe
  • 从角度服务通过管道传输时,rxjs catchError 不起作用

    使用 redux 和 Angular 我有以下效果 Effect public authenticate Observable
  • http 请求每 x 秒一次(角度)

    我试图在 angular2 中每 x 秒刷新一次 http 调用 ionViewDidLoad let loader this LoadingController create content Please Wait loader pres
  • Http 请求的加载指示器

    我的问题的根源是在 http 请求上显示加载指示器 我想在服务级别上执行此操作 而不必为每个组件编写代码 我所做的是实现一个 http 包装器 它基本上执行以下操作 getMyHttpObservable setLoadingIndicat
  • 如何延迟forkJoin

    你会怎样拖延 forkJoin 在 rxjs 中 这是我已经拥有但想使用的delay https www learnrxjs io operators utility delay html运营商用那个 return forkJoin thi
  • 使用 Angular HTTP Observable 的轮询 API

    在我的组件 html 中 我使用 asyncPipe 来订阅此 http 服务 该服务将 json 响应对象映射到类实例数组 这一切都很好 但我希望 http 服务每隔几秒轮询一次 我已经尝试了很多东西 比如间隔 但目前 RXJS 似乎有点
  • 使用 Jest 模拟延迟() RxJS

    有没有简单的方法来嘲笑delay 例如 带有假时间的可观察对象中的 RxJS 方法 我有这个方法 register user return this checkLog user delay 500 flatMap 当我删除时delay 方法
  • RxJS Angular2 在 Observable.forkjoin 中处理 404

    我目前正在链接一堆 http 请求 但是在订阅之前我无法处理 404 错误 My code 在模板中 service getData subscribe data gt this items data err gt console log
  • Pipe 和 Tap VS 使用 ngxs 订阅

    我正在玩管道并订阅 如果我使用带有水龙头的管道 则控制台中不会登录任何内容 如果我使用订阅 它就可以工作 那么我做错了什么 import Observable from rxjs import tap take from rxjs oper
  • Angular 2 可观察间隔锁定 UI

    当我使用Observable Interval要执行 UI 的 http 刷新 如果间隔太快 它会锁定 UI 上的按钮 使其无法工作 按钮没有记录点击 似乎是一个计时问题 如果我增加时间并因此错过了 get 调用 则按钮可以工作 但数据会延
  • Angular 7通过调用两次服务订阅方法进行通信

    我正在使用角度 尝试与非父子组件进行通信 所以我通过服务来传达它 服务 ts Istoggle false Output change EventEmitter lt boolean gt new EventEmitter toggle t
  • 避免在 Angular 2+ 中嵌套订阅?

    我有2个端点 1 个端点来获取当前用户的日志 1 个端点来获取该用户的授权 实际上我使用 this user subscribe e gt this grants get e subscribe x gt console log x 但这是

随机推荐