在给定对象json数组中的属性的情况下,如何从JSON过滤数据 [英] how to filter data from JSON given a property in json array of objects

查看:48
本文介绍了在给定对象json数组中的属性的情况下,如何从JSON过滤数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很抱歉,这篇文章很长,但想确保我能解释一下自己.

Sorry about the long post but wanted to make sure I explain myself.

我有以下数组

[0 … 99]
0: {option: "Option1", subOption: "subOption11"}
1: {option: "Option1", subOption: "subOption12"}
3: {option: "Option1", subOption: "subOption13"}
4: {option: "Option1", subOption: "subOption14"}
5: {option: "Option1", subOption: "subOption15"}
6: {option: "Option1", subOption: "subOption16"}
7: {option: "Option1", subOption: "subOption17"}
8: {option: "Option1", subOption: "subOption18"}
9: {option: "Option1", subOption: "subOption19"}
10: {option: "Option1", subOption: "subOption110"}
11: {option: "Option2", subOption: "subOption21"}
12: {option: "Option2", subOption: "subOption22"}
13: {option: "Option2", subOption: "subOption23"}
14: {option: "Option2", subOption: "subOption24"}
15: {option: "Option2", subOption: "subOption25"}
16: {option: "Option2", subOption: "subOption26"}
17: {option: "Option2", subOption: "subOption27"}
18: {option: "Option2", subOption: "subOption28"}
19: {option: "Option2", subOption: "subOption29"}
20: {option: "Option2", subOption: "subOption220"}
...
...
...

服务电话:

  getOptions(): Observable<Options[]> {
    const url = `https://localhost:5001/api/options/`;
    return this.http.get<Options[]>(url);
  }
  

在component.ts文件中以以下方式使用代码.这段代码为我返回了不同的 options

Using the code the following way in component.ts file. This code returns me the distinct options

  getDistinctOptions() {
    const items$ = this.optionsService.getOptions();
    items$.pipe(
        switchMap((results) => results.map((x) => x.option)),
        distinct()
      )
      .subscribe((res) => {
        this.optionsArray = [...this.optionsArray, res];
      });     
  }  

我的目标是执行以下操作:获取与这些不同选项相关的不同选项和subOption,并通过以下方式循环运行以生成组件

My aim is to do the following: Get distinct options and subOptions related to those distinct options and run loop through to generate the components the following way

 <option-component *ngFor="let i of options">
  <test-accordion-component [option]="i">
     <test-sub-component [subOption]="j" *ngFor="let j of subOptions"></test-sub-component>
  </test-accordion-component>
 </option-component>

我已经为此工作了很长时间,但未能找到解决方案.如果有人可以引导我正确地指导我如何基于 options 获取 subSections ,然后使用它们遍历并生成组件.我对学习RxJ并遇到许多障碍非常陌生.

I have been working on this for quite a while but have not been able to reach a solution. If someone could please guide me in the right direction on how I can get subSections based on options and then use them to loop through and generate components. I am very new to learning RxJs and running into quite a few roadblocks.

感谢所有帮助!

推荐答案

您也许可以使用 .groupBy 将选项数组再次分组为 Array< Option []>

You might be able to use a .groupBy to have your array of options be grouped again into Array<Option[]>

基于 https://www.learnrxjs.io/learn-rxjs/operators/transformation/groupby

getOptions(): Observable<Options[]> {
  const url = `https://localhost:5001/api/options/`;
  return this.http.get<Options[]>(url);
}

getOptions().pipe(
  groupBy(option => option.subOption),
  mergeMap(group => group.pipe(toArray())) // get the grouped items back as array
)

这篇关于在给定对象json数组中的属性的情况下,如何从JSON过滤数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆