首页 > 解决方案 > SPR 移动窗口:单击时显示多词区域,但仍保留单个词之间的空格

问题描述

我正在使用移动窗口设计进行自定进度阅读任务,其中句子中的所有单词最初都被破折号覆盖,直到参与者按下空格并显示第一个区域(带有多个单词)。一旦他们再次单击,第一个区域将再次被破折号覆盖,第二个区域将被显示,依此类推。下面是我的 JS 代码组件来实现这一点。我在 csv 和编码的 sentenceList 中的区域之间放置了逗号,以根据这些逗号进行拆分。这样,区域不是一个单词一个单词,而是一个区域一个区域,可以包含多个单词。

开始日常:

sentenceList = Sentence.split(",");
wordNumber = (- 2);

每帧:

var _pj;
function replaceWithdash(sentenceList, currentWordNumber) {
    var index, result, word;
    result = "";
    index = 0;
    while ((index < sentenceList.length)) {
        word = sentenceList[index];
        if ((index !== currentWordNumber)) {
             result = ((result + ("-".repeat(word.length))) + " ");
        } else {
            result = ((result + word) + " ");
        }
        index = (index + 1);
    }
    return result;
}
function _pj_snippets(container) {
    function in_es6(left, right) {
        if (((right instanceof Array) || ((typeof right) === "string"))) {
            return (right.indexOf(left) > (- 1));
        } else {
            if (((right instanceof Map) || (right instanceof Set) || (right instanceof WeakMap) || (right instanceof WeakSet))) {
                return right.has(left);
            } else {
                return (left in right);
            }
        }
    }
    container["in_es6"] = in_es6;
    return container;
}
_pj = {};
_pj_snippets(_pj);
Trials_Display.text = replaceWithdash(sentenceList, wordNumber);
keypresses = psychoJS.eventManager.getKeys();
if ((keypresses.length > 0)) {
    if (_pj.in_es6("space", keypresses)) {
        thisResponseTime = t;
        wordNumber = (wordNumber + 1);
        if ((wordNumber < sentenceList.length)) {
            if ((wordNumber === 0)) {
                timeOfLastResponse = 0;
            }
            thisExp.addData(("IRI_" + wordNumber.toString()), (thisResponseTime - timeOfLastResponse));
            timeOfLastResponse = thisResponseTime;
            Trials_Display.text = replaceWithdash(sentenceList, wordNumber);
        } else {
            continueRoutine = false;
        }
    } else {
        if (_pj.in_es6("escape", keypresses)) {
            core.quit();
        }
    }
}

我的问题与破折号的显示有关。就像我说的,我使用逗号定义区域,所以在上面定义的 replaceWithdash 函数中,我基本上可以说“覆盖与长度相同的破折号的区域,然后在其后放置一个空格”。使用该代码,这是显示:

------  ---  ------
The dog  ---  ------

请注意,区域之间有一个空格(因此这里将有三个区域),但是当它们都是破折号时,这些区域中的单词之间没有空格。

但是,我的目标是让参与者能够在逐个区域单击之前查看句子中总共有多少个单词,所以我需要单词之间的空格而不是区域。像这样:

---  ---  ---  ---  ---  
The dog  ---  ---  ---

现在,参与者可以看到总共有多少单词以及它们之间的所有空格,但区域仍然相同。

到目前为止我尝试了什么:我对 JS 了解不多,但我认为我需要使用单独的分隔符(区域的逗号和单词的下划线)定义单词边界和区域边界。不过,我基本上只能做到这一点,因为在 replaceWithdash 函数中,它需要逐个区域读取才能正确显示内容(我很确定)。我不知道如何告诉它逐字创建空格。也许我需要为单词边界分隔符创建另一个变量?就像是

wordList = Sentence.split("_");

然后用它做点什么?或者还有其他关于按键显示的领域我可以搞砸吗?

任何帮助,将不胜感激!!

标签: javascriptpsychopy

解决方案


推荐阅读