angular - 角度可观察订阅中的计算提供了错误的数据
问题描述
我有一个 observable,它以以下结构提供数据:
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
})
推荐阅读
- facebook-marketing-api - Facebook Marketing API 用于个人目标兴趣的转化统计
- python - 如何使用 dnn 修复此打开的 cv 库错误?
- reactjs - Reactjs:使用相同的表单进行添加和更新
- amazon-web-services - 如何正确使用 aws rds describe-events
- javascript - 如何优化 getYoutubeViews 功能以免超过每日 Youtube API 配额?
- php - PHP - mssql_connect():无法连接到服务器
- angular - httppost订阅的angular6结果
- python - 错误:TeleBot:“发生类型错误,args =(”'in
' 需要字符串作为左操作数,而不是 NoneType",) - c# - 由于 SSL 无效或过期而无法请求服务器 - 如何忽略?
- html - 如果页面源不包含“id”属性,如何使用 Excel VBA 输入网页表单