jsPsych实验代码无法正确将图片分配至指定数组的问题求助
问题根因
你遇到的两个异常都是代码中三处基础错误导致的:
imageNames数组配置错误:你定义的数组仅包含9个带多余单引号的元素,缺失了apple类别,循环到i=9时无法匹配到有效试次数据,直接导致最终数组长度不足,仅能生成5个试次- 图片路径被强制转为字符串:
select('stimulus').values本身是单个类别下2张图片路径组成的数组,你添加的''+操作会将两个路径拼接为逗号分隔的单个字符串,无法被插件识别为有效图片路径,所以图片不显示 - 条件分配函数执行时机错误:
on_load属性直接填写带括号的函数调用,会在代码初始化阶段就执行该函数,此时评分任务还未运行,取到的都是空数据
修复代码
1. 修正imageNames数组
// 替换原有imageNames定义即可 imageNames = ["salad", "pear", "lollipop", "grapes", "cotton candy", "cookie", "carrot", "cake", "brownie", "apple"];
2. 重写conditionAssignment函数
// 替换原有conditionAssignment函数,不需要冗余的中间数组 function conditionAssignment() { const imageNames_shuffled = jsPsych.randomization.shuffle(imageNames); // 清空两个结果数组避免重复添加 imagesNatural = []; imagesHealthy = []; // 处理前5个类别 for (let i = 0; i <= 4; i++) { const currName = imageNames_shuffled[i]; const currTrialData = jsPsych.data.get().filter({name: currName}); const sumScore = currTrialData.select('response').sum(); const stimPaths = currTrialData.select('stimulus').values; if (sumScore <=5) { stimPaths.forEach(path => imagesNatural.push({food: path})); } else { stimPaths.forEach(path => imagesHealthy.push({food: path})); } } // 处理后5个类别 for (let i = 5; i <=9; i++) { const currName = imageNames_shuffled[i]; const currTrialData = jsPsych.data.get().filter({name: currName}); const sumScore = currTrialData.select('response').sum(); const stimPaths = currTrialData.select('stimulus').values; if (sumScore <=5) { stimPaths.forEach(path => imagesHealthy.push({food: path})); } else { stimPaths.forEach(path => imagesNatural.push({food: path})); } } }
3. 修正selectStimuli_1的on_load配置
var selectStimuli_1 = { type: 'html-keyboard-response', stimulus: "Just a moment...", choices: jsPsych.NO_KEYS, trial_duration: 1000, on_load: conditionAssignment // 去掉括号,仅传入函数引用,等试次加载时再执行 };
修改完成后imagesNatural数组会正确存储10个图片路径对象,test阶段会正常加载10个带图片的试次。
内容的提问来源于stack exchange,提问作者Guzzly Puzzly
相关产品推荐
相关产品推荐

