You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jsPsych实验代码无法正确将图片分配至指定数组的问题求助

问题根因

你遇到的两个异常都是代码中三处基础错误导致的:

  1. imageNames数组配置错误:你定义的数组仅包含9个带多余单引号的元素,缺失了apple类别,循环到i=9时无法匹配到有效试次数据,直接导致最终数组长度不足,仅能生成5个试次
  2. 图片路径被强制转为字符串:select('stimulus').values本身是单个类别下2张图片路径组成的数组,你添加的''+操作会将两个路径拼接为逗号分隔的单个字符串,无法被插件识别为有效图片路径,所以图片不显示
  3. 条件分配函数执行时机错误: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:45:06