首页 > 解决方案 > 如何使用 rxjs 映射通过另一个不同类型的对象列表过滤出一个可观察的对象列表

问题描述

我有一个从 api 返回的可观察列表,我想根据我在本地会话存储中拥有的另一个列表的属性值对其进行过滤。它基本上是一个内部连接。有没有比使用 rxjs 地图/过滤器更好的方法?此过滤器适用于单个值,但我不确定如何根据列表的属性值进行过滤

 loadTable() {
    this.service.getSomeDataFromAPI() 
    .pipe(
      map(
        items => items.filter(item => item.branchCode.indexOf(StaticListOfObjects.branchCode) > -1)       
         )
     )
    .subscribe(response => {  ...  }
    );
  }

这是我的 staticListOfObject,我需要过滤所有与 branchCode 匹配的对象。

[
  {
    branchCode: "AV1",
    summaryCount: 10,
  },
  {
    branchCode: "AV2",
    summaryCount: 5,
  },
  {
    branchCode: "BR1",
    summaryCount: 4,
  },
];

标签: javascriptangularrxjsangular-materialobservable

解决方案


由于 API 调用返回一个列表(我假设是一个数组),您只需要映射它并像这样过滤它;

  let filterArray = [
  {
    branchCode: "AV1",
    summaryCount: 10
  },
  {
    branchCode: "AV2",
    summaryCount: 5
  },
  {
    branchCode: "BR1",
    summaryCount: 4
  }]

  loadTable() {
    this.service.getSomeDataFromAPI().pipe(
      map(
        items => items.filter( item => {
          if (filterArray.find(filterItem => filterItem.branchCode == item.branchCode)) {
            return true
          } else {
            return false
          }
        })   
      )
    ).subscribe(response => {  ...  });
  }

推荐阅读