我很抱歉新手的问题,但这让我发疯了。
我有一句话。 对于单词的每个字母,将找到一个数组中的字符位置,然后返回在并行数组中找到的相同位置的字符(基本密码)。 这是我已经拥有的:
*array 1 is the array to search through*
*array 2 is the array to match the index positions*
var character
var position
var newWord
for(var position=0; position < array1.length; position = position +1)
{
character = array1.charAt(count); *finds each characters positions*
position= array1.indexOf(character); *index position of each character from the 1st array*
newWord = array2[position]; *returns matching characters from 2nd array*
}
document.write(othertext + newWord); *returns new string*
我遇到的问题是,目前该函数只写出新单词的最后一个字母。我确实想在document.write中添加更多文本,但是如果我放在for循环中,它将写出新单词,但也写出每个单词之间的其他文本。 我真正想做的是返回othertext + newWord而不是document.write,以便我以后可以使用它。 (只是使用doc.write来发短信我的代码) :-)
我知道这很简单,但我看不出我哪里出错了。 有什么建议吗?谢谢伊西
解决方案是使用 +=
而不是 =
在循环中构建newWord
。只需在循环之前将其设置为空字符串即可。
此代码还有其他问题。变量 count
永远不会初始化。但是,让我们假设循环应该使用count
而不是position
,因为它是主计数器。在这种情况下,如果我没记错的话,这个循环只会生成array2
newWord
。循环正文的前两行在说话时相互抵消,position
将始终等于count
,因此来自array2
的字母将从头到尾依次使用。
能否提供一个输入和期望输出的示例,以便我们了解您实际想要完成的任务?
构建代码和问题的一个好方法是定义需要实现的function
。在您的情况下,这可能如下所示:
function transcode(sourceAlphabet, destinationAlphabet, s) {
var newWord = "";
// TODO: write some code
return newWord;
}
这样,您就可以清楚地说明您想要的内容以及涉及哪些参数。以后编写自动测试也很容易,例如:
function testTranscode(sourceAlphabet, destinationAlphabet, s, expected) {
var actual = transcode(sourceAlphabet, destinationAlphabet, s);
if (actual !== expected) {
document.writeln('<p class="error">FAIL: expected "' + expected + '", got "' + actual + '".</p>');
} else {
document.writeln('<p class="ok">OK: "' + actual + '".');
}
}
function test() {
testTranscode('abcdefgh', 'defghabc', 'ace', 'dfh');
}
test();