Javascript 在Java脚本中,一个索引依赖于另一个索引

Javascript 在Java脚本中,一个索引依赖于另一个索引,javascript,for-loop,if-statement,indexing,embedding,Javascript,For Loop,If Statement,Indexing,Embedding,我正在为一个移动窗口设计的自定步调阅读实验制作一个函数,在这个实验中,输入一个句子,一个函数用破折号替换所有字母。然后,参与者点击句子,发现第一个单词/区域;在下一次单击时,第二个单词/区域被覆盖,上一个单词/区域被破折号覆盖,依此类推,直到句子结束。下面是我为实现这一点而编写的replaceWithdash函数代码 function replaceWithdash(sentenceList, currentWordNumber) { var index, result, word, lett,

我正在为一个移动窗口设计的自定步调阅读实验制作一个函数,在这个实验中,输入一个句子,一个函数用破折号替换所有字母。然后,参与者点击句子,发现第一个单词/区域;在下一次单击时,第二个单词/区域被覆盖,上一个单词/区域被破折号覆盖,依此类推,直到句子结束。下面是我为实现这一点而编写的replaceWithdash函数代码

function replaceWithdash(sentenceList, currentWordNumber) {
var index, result, word, lett, reslett;
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);
    lett = Sentence.charAt(index);
    reslett = result.charAct(index);
    if (lett === " ") {
        result = (reslett.replace("-"," "));
        } else {
        result = (reslett);
        }
    }
return result;
}
等等。我面临的问题(因此需要使用'lett'和'reslett'变量)是,我不希望逐字显示,而是希望逐区域显示。这些区域可以包含多个单词。因此,在上面的例子中,第一个区域将是“狗”,而不仅仅是“狗”。为了在单击时正确显示分隔字符串,我只需将输入更改为“thedog,ate,thefood”,并使用逗号分隔句子列表。但是,这会产生以下结果:

------- --- --------
*click*
The dog --- --------
如您所见,显示的结果是正确的,显示的第一个区域评级比第一个单词高,但replaceWithdash函数将单词之间的空格作为字符读取,因此,dash显示不正确,并且看不到空格(因此看起来句子中有3个单词,而不是5个)。为了避免这种情况,我尝试使用变量'lett'和'reslett'创建另一个if语句,它们在原始句子和虚线句子('result')中选择特定的索引。if-else的意思是:如果句子中的字符索引是空格,那么结果虚线句子中的相同字符索引(因为它们的长度相同)将替换为空格。如果字符不是空格,则只保留结果中的空格,即破折号。因此,在上面的句子中,通过charAt(0)-charAt(3),破折号应该保留,但是一旦你点击了charAt(4),“result”现在应该用空格代替破折号。 除了我一直在自学的内容之外,我对Java脚本知之甚少,所以我认为我的代码可能有点不对劲,因为它实际上不起作用。 我需要的显示器是:

--- --- --- --- ----
*click*
The dog --- --- ----

有了这段代码,它只是用空格替换了所有的破折号(所以显示的是空的),所以这里出了点问题,有什么想法吗?

如果我理解正确,这就是你要看的,对吗

函数replaceWithdash(句子列表,当前单词编号){
const regions=sentenceList.split(“,”)
const sigil=regions.map(s=>s.replaceAll(/[^\s]/g,“-”)
如果(currentWordNumber!==未定义){
信号拼接(currentWordNumber,1,区域[currentWordNumber])
}
返回sigil.join(“”)
}
str=“狗,吃,食物”
console.log(replaceWithdash(str))
//"--- --- --- --- ----"
console.log(replaceWithdash(str,0))
//“狗——”
console.log(replaceWithdash(str,1))
//“————吃了————”
控制台日志(替换为短划线(str,2))

//“----食品”
请提供一个“原始”字符串作为数据进行测试。“两个未定义的变量11 lett 13 lett 12 reslett 14 reslett 16 reslett两个未使用的变量1_pj 2 replaceWithdash”对不起,我真的不太清楚“原始”字符串是什么意思(对不起,我不熟悉这一点)。我想这将是一个类似于我给出的“狗,吃,食物”的句子?也许可以举一个例子,以及如何将它传递给代码中的函数,这可能有助于增加问题的清晰度。“我的实验没有初始化”是什么意思?有错误吗?如果是,那是什么。试着找出你的一个问题。因此,输入来自csv——或者更具体地说,是一列类似于我上面评论中的句子。我应该澄清一下,但这段代码来自于在巴甫洛维亚上在线运行的实验生成器Psychopy3上的一个代码组件。当我说实验没有初始化时,我的意思是实验没有加载巴甫洛维亚。这通常是由于Pavlovia正在读取的Java脚本中出现了一些问题(因为也没有错误报告),而我从一个进行初始化的实验中改变的唯一一件事就是我提到的for循环,所以我认为这就是问题所在。这段代码确实按区域正确显示,但空格仍然被视为字符,所以破折号仍然会取代它们。现在,“狗,吃了,食物”的展示是------------------任何东西之间都没有间隔。为了最初在区域之间有空格,我在代码中添加了“+”:result=((result+(“-”。repeat(word.length)))+”;。但是它并没有解决单词之间的空格问题如果我把return sigil.join(“”)改为return sigil.join(“”)加上一个空格,它会在区域之间加一个空格,但是在句子列表中定义的区域之间,不是在字词之间。有没有办法操纵replaceAll函数来忽略空格或区域内的特定字符?它不全是虚线,隐藏时空格作为空格保留。如果您在这里执行答案本身中的代码(按钮
运行代码片段
),您将看到
的输出“狗,吃了,食物”
完全隐藏是
--
您是对的,当我按下它时效果很好,但是当我尝试实现它时,我遇到了一些问题。第一个是在Begin例程(此处未显示)中将sentenceList定义为sentenceList=SENTURE.split(“,”;”“句子”是我的列名和所有的句子字符串。我试着摆脱它,因为现在这些句子在你给出的代码中是分开的,但是由于某种原因现在它不运行了。我将在另一条评论中发布我正在使用的代码。我不确定它是否不起作用,因为它现在处于实验的不同部分,或者代码中是否有问题
--- --- --- --- ----
*click*
The dog --- --- ----