从并行数组返回一个字符串

时间:2011-05-14 08:22:52

标签: javascript string parallel-arrays

我很抱歉这个新手问题,但这让我很生气。

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

*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来发送我的代码文本): - )

我知道它的内容非常简单,但我无法知道我哪里出错了。有什么建议? 谢谢 ISSY

2 个答案:

答案 0 :(得分:1)

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

此代码还有其他问题。变量count永远不会被初始化。但是我们假设循环应该使用count而不是position作为它的主要计数器。在这种情况下,如果我没有弄错的话,这个循环只会生成array2 newWord。在演讲中,前两行循环的身体相互抵消,position将始终等于count,因此来自array2的字母将从开始到结束顺序使用。

您能提供一个输入和所需输出的示例,以便我们了解您实际想要完成的内容吗?

答案 1 :(得分:0)

构建代码的好方法和问题是您定义了需要实现的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();