GroupBy 一个 RxJS Observable 成键值
GroupBy an RxJS Observable into key-values
我有以下类型为 Observable 的条目:
[{
"id": 1,
"name": "Testuser 1",
"projectAccess": Role,
}]
.json
Role {
id: string;
name:string;
}
所以要求有一个数组,其中用户是按角色分组的,我想将其作为组条目传递到通用自动完成组件中
return data:
[{
manager, [{"1", "Frank"}, {"3", "Seba"}]
},
{employee, [{"2", "Simi"}]
},]
任何帮助都将是appreciated.Thank你
为了实现 groupby 功能,您必须实现自己的 groupby 功能。
由于 pipe(map()) 组合,该函数在使用 observables 和简单数组之间没有区别
为了实现这个问题与此非常相似question
此处列出的算法生成一个对象,其中对象的键是分组的 属性,值是列表中的出现次数。
示例代码
私有 testUser:Observable<用户[]>
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]})
}
};
Rxjs reduce 应该适用
const {of} = rxjs;
const {reduce} = rxjs.operators;
const data = [ {
id: 1,
name: 'Testuser 1',
projectAccess: {id: 1, name: 'manager'},
} ];
of(data).pipe(
reduce((acc, _data) => {
for (let item of _data) {
if (acc[item.projectAccess.name]) {
acc[item.projectAccess.name] = [...acc[item.projectAccess.name], {[item.id]: item.name}];
} else {
acc[item.projectAccess.name] = [{[item.id]: item.name}];
}
}
return acc;
}, {}),
).subscribe(console.log);
<script src="https://unpkg.com/rxjs/bundles/rxjs.umd.min.js"></script>
我有以下类型为 Observable
[{
"id": 1,
"name": "Testuser 1",
"projectAccess": Role,
}]
.json
Role {
id: string;
name:string;
}
所以要求有一个数组,其中用户是按角色分组的,我想将其作为组条目传递到通用自动完成组件中
return data:
[{
manager, [{"1", "Frank"}, {"3", "Seba"}]
},
{employee, [{"2", "Simi"}]
},]
任何帮助都将是appreciated.Thank你
为了实现 groupby 功能,您必须实现自己的 groupby 功能。
由于 pipe(map()) 组合,该函数在使用 observables 和简单数组之间没有区别
为了实现这个问题与此非常相似question 此处列出的算法生成一个对象,其中对象的键是分组的 属性,值是列表中的出现次数。
示例代码
私有 testUser:Observable<用户[]>
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]})
}
};
Rxjs reduce 应该适用
const {of} = rxjs;
const {reduce} = rxjs.operators;
const data = [ {
id: 1,
name: 'Testuser 1',
projectAccess: {id: 1, name: 'manager'},
} ];
of(data).pipe(
reduce((acc, _data) => {
for (let item of _data) {
if (acc[item.projectAccess.name]) {
acc[item.projectAccess.name] = [...acc[item.projectAccess.name], {[item.id]: item.name}];
} else {
acc[item.projectAccess.name] = [{[item.id]: item.name}];
}
}
return acc;
}, {}),
).subscribe(console.log);
<script src="https://unpkg.com/rxjs/bundles/rxjs.umd.min.js"></script>