我试图弄清楚如何从对象列表开始获取分组和聚合的值数组(我可以与 ngFor 一起使用),而对于我的生活,我无法让它工作。数据(这是我状态的一部分)看起来像这样:
[{name: "A", value: 1, desc: 'something irrelevant'},
{name: "A", value: 3, desc: 'also other properties'},
{name: "B", value: 2, desc: 'etc.'},
{name: "B", value: 5, desc: 'etc.'}]
我想要得到的结果是这样的(注意类型不同):
[{name: "A", value: 4}, {name: "B", value: 7}]
所以,基本上我想为具有该名称的所有对象找到不同的“名称”和“值”的总和,并具有可供 ngFor | 使用的输出。异步的。
目前,我获得不同价值的几乎可行的解决方案是:
this.aggregates:Observable<any[]> = this.store
.select(state => state.valuesList)
.map(valuesList => valuesList.sort((a,b) => {return (a.name > b.name) ? 1 : ((b.name > a.name) ? -1 : 0);} }))
.flatMap(valuesList => valuesList)
.map(value => value.name)
.distinct();
我很乐意从这个开始;问题是,如果我不添加 toArray(),Typescript 会抱怨“Type string is not assignable to type any[]”;如果我在 distinct() 之后添加 toArray(),它不会再抱怨,但 subscribe() 不会产生任何结果。
我究竟做错了什么?我应该把所有东西都移到reducer(但是我不知道我是否可以改变同一个reducer中不同动作返回的对象类型)?非常感谢任何帮助。
更新:我会更高兴有一个工作 groupBy() 实现,因为它应该正是它的用例。