0

我很抱歉这个新手问题,但这让我发疯。

我有话说。对于单词的每个字母,找到一个数组中的字符位置,然后返回在并行数组中找到的相同位置的字符(基本密码)。这是我已经拥有的:

*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 给我的代码发短信):-)

我知道这很简单,但我看不出哪里出错了。有什么建议吗?谢谢伊西

4

2 回答 2

1

解决方案是使用而不是newWord在循环内构建。只需在循环之前将其设置为空字符串。+==

这段代码还有其他问题。变量count永远不会被初始化。但是让我们假设应该使用循环count而不是position它的主要计数器。在这种情况下,如果我没记错的话,这个循环只会生array2成为newWord. 循环体的前两行可以说相互抵消,并且position总是等于count,所以字母 fromarray2将从头到尾依次使用。

您能否提供一个输入和所需输出的示例,以便我们了解您真正想要完成的工作?

于 2011-05-14T09:20:28.383 回答
0

构建代码和问题的一种好方法是定义function需要实现的 a 。在您的情况下,这可能如下所示:

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();
于 2011-05-14T09:56:59.707 回答