首页 > 解决方案 > GroupBy 将一个 RxJS Observable 转化为键值

问题描述

我有以下 Observable<User[]> 类型的条目:

[{
   "id": 1,
   "name": "Testuser 1",
   "projectAccess": Role,
}] 

.json

Role {
id: string;
name:string;
}

所以要求就像有一个数组,其中用户是分组角色,我想将其作为组条目传递给通用自动完成组件

  return data:
  [{
  manager, [{"1", "Frank"}, {"3", "Seba"}]
  },
  {employee, [{"2", "Simi"}]
  },]

任何帮助将不胜感激。谢谢

标签: angularautocompleterxjsrxjs-observables

解决方案


为了实现 groupby 功能,您必须实现自己的 groupby 功能。

由于 pipe(map()) 组合,该函数在使用 observables 和简单数组之间没有区别

为了实现这个问题,这个问题与这个问题非常相似,那里 列出的算法会产生一个对象,其中对象的键是分组属性,值是列表中的出现次数。

示例代码

私有 testUser:Observable<User[]>

this.testuser.pipe(map((value)=>{
   return groupBy(value);
}))



groupBy(user[]) {
  let groupped=xs.reduce(function(rv, x) {
    (rv[x.ProjectAccess.Name] = rv[x.ProjectAccess.Name] || []).push(x);
    return rv;
  }, {});

  let returnList=[];

  for(let i in groupped){
   returnList.push({role:i,value:groupped[i]})
  }
};

推荐阅读