角度可观测订阅中的计算提供了错误的数据



我有一个可观察的,它以以下结构提供数据:

export interface expResults {
user: User;
results: {
experiment: Experiment
attempts: number
passed: boolean
}[];
}

我现在想做的是计算至少进行一次实验的速率。例如:

Donald;
results: {
experiment: Experiment1
attempts: 3
passed: true
}[];
Micky;
results: {
experiment: Experiment1
attempts: 0
passed: false
}[];
Frank;
results: {
experiment: Experiment1
attempts: 3
passed: false
}[];
Lisa;
results: {
experiment: Experiment1
attempts: 0
passed: false
}[];

在这种情况下;0.5〃;因为50%的用户至少尝试过一次实验。

我使用以下代码,但它没有返回任何数据。有人能看出我的错误吗?

expResults: Observable<expResults[]> = of();
ngOnInit(): void {
this.expResults = this.dataService.getData(topic);
this.expResults.pipe(map((resultSet2) => {
return resultSet2.reduce((acc, resultSet) => {
resultSet.results.forEach((t) => {
if (acc[t.attempts] == null) acc[t.attempts] = [];
else {
if (t.attempts == 0) {
acc[t.attempts].push(0);
} else {
acc[t.attempts].push(1);
}
}});
return acc;
}, {});
}),
map((resultsObj) => {
return Object.keys(resultsObj).map((key) => {
const count = resultsObj[key].length;
const sum = resultsObj[key].reduce((a, b) => a + b, 0);
const rate = sum / count;
this.ChartData[0].data.push(Number(rate));
});
})
)
.subscribe();
}
this.expResults.pipe(map((result: expResults[]) => {
// Calculate number of experiments performed at least once
const numberOfPerformed = result.reduce((acc, item) => {
// If attempts > 0 then add 1 to the sum
acc += (item.results.attempts ? 1 : 0);
return acc;
}, 0)
// Calculate rate
return numberOfPerformed / result.length;
})).subscribe((rate) => {
// rate
})

最新更新