角度过滤器可由地图键观察

时间:2017-12-18 16:18:20

标签: angular rxjs

我有一个可观察的categories,它会从带有网址和名称的api获取所有类别的列表

{url: "http://test.com/1", name: "test1"}
{url: "http://test.com/2", name: "test2"}

我有一个selectedkeywords列表,其中包含名称和类别(包含网址和名称)。我制作了一张新地图,因为我需要按类别重新排序,所以我有一个属于这样一个类别的关键字列表:

this.keywordsSelected$ = this.keywords$.map((keywords) => {
  return keywords.reduce((acc, keyword) => {
    if (!acc.has(keyword.category.url)) {
      acc.set(keyword.category.url, []);
    }
    acc.get(keyword.category.url).push(keyword);
    return acc;

  }, new Map<string, Keyword[]>());
});

所以我得到一个地图,其中一个url作为键,数组中包含关键字:

Map(2) {"http://test.com/2" => Array(5)}

第一个列表类别具有我需要保留的特定顺序。这就是为什么我想要通过第二个列表过滤该列表,所以我只显示'selecetedkeywords'列表中的类别。像这样:

categories.filter(cat => cat.url === selectedkeyword.key

我对反应式编程有点新意,所以很明显我错过了一些东西,但也许有人可以帮我推动正确的方向?

1 个答案:

答案 0 :(得分:0)

我找到了@martin建议使用combinelatest:

的解决方案
 const key$ = this.keywordsSelected$.switchMap(keys => Observable.from(keys));


const testing = Observable.combineLatest(this.categories$, key$)
  .map(([category, keyword]) => {
    return category.filter(cat => (cat as any).url === keyword[0]);
  });'