使用Javascript实现心理学实验累计总分功能遇计算错误如何修复
问题根源
你当前的累计逻辑错误,每次循环时你读取的是当前试次的单试次得分而非之前已经累计好的总分,才会出现最终结果等于最后一次试次得分两倍的情况:
- 你每次先把当前试次得分
pointConvertedBlue存入EMBEDDED_DATA字段 - 紧接着读取
EMBEDDED_DATA的值,拿到的就是刚存的本次试次得分 - 再执行
retrievedValue += pointConvertedBlue就等于把本次得分加了两次,之前所有试次的得分都没有被累加进去
修复后的每试次代码
if (row.display == _requiredFeedbackDisplay) { if (screenIndex == _requiredFeedbackScreen) { if (row.TrialNumer >= 1 && row.TrialNumer <= 30) { // 读取反应时计算本次试次得分 var lastRT: number = gorilla.retrieve(_RTKey, null, false); var roundedRT: number = Math.round(lastRT); var pointConvertedBlue: number = 8000 - roundedRT; gorilla.store(EMBEDDED_DATA, pointConvertedBlue, true); // 修改点:读取之前已经累计好的总分,初始默认值为0 var totalScore: number = gorilla.retrieve(TOTAL_SCORE, 0, true); // 把本次试次得分加到历史总分上 totalScore += pointConvertedBlue; gorilla.store(TOTAL_SCORE, totalScore, true); // 展示本次试次得分 $(container + _requiredFeedbackZoneSelector).html( "<h1>" + '<p style="color: white;">' + "You earned " + pointConvertedBlue + " points" + "</p> " + "</h1>" ); gorilla.refreshLayout(); gorilla.metric({ trial_number: "pointConvertedBlue", response: pointConvertedBlue, }); } } }
休息屏展示总得分的代码无需修改,原有逻辑可正常读取累计后的总分。
内容的提问来源于stack exchange,提问作者Tessa
相关产品推荐
相关产品推荐

