【发布时间】:2019-10-06 13:48:00
【问题描述】:
我在服务中有一个 observable,当订阅它时,它会返回一个对象,其中记录了用户为他从事的每个项目记录的时间。
this.calculationService.getSumsByProject().subscribe(sum =>
console.log(sum);
}
日志显示这样的数据{undefined: 0, MISSING!: 16, Project1: 5, Project2:1, Project3: 20,Project4: 15}
这些项目是 Project 类型数组的一部分,看起来像这样:
projects: Project[] = [
{name: 'MISSING',ids:[]},
{name: 'Project1', ids:['pid75.22','pid75.23']},
{name: 'Project2', ids:['pid75.22','pid75.23']},
{name: 'Project3', ids:['pid66.1','pid33.99']},
{name: 'Project4', ids:['pdi75.88','pid99.15']}]
我有一个用户 ID 数组,如下所示:
currentUserIds=['pid75.22','pid100.03','pid75.88','Not Specified']
我想做的事:
我的目标是解析对象的键值对并添加在用户 ID 下记录的小时数。未指定从与用户没有共同 ID 的项目中获取小时数。
例如:
pid75.22:6
pid100.03:0
pid75.88:15
Not specified:36
到目前为止我做了什么以及卡在哪里
loggedProjectNames: string[];
loggedProjectHours: string[];
projectByName(name: string): Project {
return _.find(this.projects, { name }) || this.projects[0];
}
ngOnInit() {
this.calculationService.getSumsByProject().subscribe(sum => {
//console.log(sum);
this.loggedProjectNames = _.keys(sum);
this.loggedProjectHours = _.values(sum);
//console.log(this.loggedProjectNames,": ",this.loggedProjectHours);
this.loggedProjectNames.forEach(name => {
const found = this.projectByName(name);
this.currentUserIds.forEach(id => {
console.log(_.find(found.ids, i => i === id));
})
})
});
我该如何从这里开始?现在我检索到与密钥关联的项目,但我不确定如何对公共 ID 记录的小时数进行分组
【问题讨论】:
-
所以基本上你需要按 id 分组?
-
对具有相同 id 的项目的小时数进行分组和求和(项目的 id 必须在 currentUserIds 中遇到 - 否则小时数总和应在“未定义”id 下)。
标签: javascript angular typescript oop lodash