gpt4 book ai didi

angular - RxJs groupBy 带有一个对象数组,每个对象都有键和值数组

转载 作者:行者123 更新时间:2023-12-05 00:46:15 26 4
gpt4 key购买 nike

所以要求是这样的:我有一个对象数组(例如数组)

[
{ empDept: 'Engineering', empLoc: 'Pune', empName: 'John' },
{ empDept: 'Engineering', empLoc: 'Mumbai', empName: 'Harry' },
{ empDept: 'HR', empLoc: 'Pune', empName: 'Denis' },
{ empDept: 'Finance', empLoc: 'Mumbai', empName: 'Elvis' },
]

我将有一个函数,它将接受属性名称作为参数,员工列表将在该参数上进行分组。所以如果输入参数值为'empDept',那么我想要的结果如下:

[
{
key: 'Engineering',
values: [
{ empDept: 'Engineering', empLoc: 'Pune', empName: 'John' },
{ empDept: 'Engineering', empLoc: 'Mumbai', empName: 'Harry' },
]
},
{
key: 'HR',
values: [
{ empDept: 'HR', empLoc: 'Pune', empName: 'Denis' },
]
},
{
key: 'Finance',
values: [
{ empDept: 'Finance', empLoc: 'Mumbai', empName: 'Elvis' },
]
}
]

我正在使用 RxJs groupBy 运算符来实现这一点。我已经尝试了下面的代码,但它似乎没有给出想要的结果:

this.groupedEmployees$ = employees$.pipe(
groupBy(person => person.empDept),
mergeMap(group => of({ key: group.key, values: group.pipe(mergeMap(x => toArray())) })),
);

感谢您的帮助。

最佳答案

如果你真的想坚持使用 RxJS,可以使用这段代码:

import { from } from 'rxjs'; 
import { groupBy, mergeMap, reduce, toArray } from 'rxjs/operators';

const groupedEmployees$ = from([
{ empDept: 'Engineering', empLoc: 'Pune', empName: 'John' },
{ empDept: 'Engineering', empLoc: 'Mumbai', empName: 'Harry' },
{ empDept: 'HR', empLoc: 'Pune', empName: 'Denis' },
{ empDept: 'Finance', empLoc: 'Mumbai', empName: 'Elvis' }
]).pipe(
groupBy(person => person.empDept),
mergeMap(group => group
.pipe(
reduce((acc, cur) => {
acc.values.push(cur);
return acc;
},
{ key: group.key, values: [] }
)
)
),
toArray()
);

groupedEmployees$.subscribe(console.log);

关于angular - RxJs groupBy 带有一个对象数组,每个对象都有键和值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61644991/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com