循环通过一系列字符

时间:2013-02-18 20:04:09

标签: javascript arrays loops textbox toggle

我想为一组不断变化的特定字符循环数组。从那以后我想切换字母的情况,我被告知使用这个特定的代码,但我无法让它工作。代码必须遍历一个字符数组,其中字符来自“输入”文本框。我该如何解决这个问题?

我应该提一下,我是在高中上课时这样做的,所以我不会在编码方面接近完美。


    <html> 
      <head> 
        <script type="text/javascript"> 
    function toggleCase() { 
        var i = document.getElementById("input").value.length;
        var word = document.getElementById("input").value;
        var chop =new array(i);
        for (a=i; a <= i; a++) {
            character[i] = word.slice(i-1,i)
            if (character[i] == character[i].toUpperCase;){
                character[i] = character[i].toLowerCase();
            }
            else {
                character[i] = character[i].toUpperCase();
            }
        }

        var final

        for (a=i; a <= i; a++) {
            final += character[i];
        }

        document.getElementById("output").value = final
    }
        </script> 
      </head> 
      <body> 
        <p>Enter letters for conversion:</p> 
        <form> 
          <input type="text" name="input" id="input" value="sample" maxlength="10"><br />
          <input type="text" name="output" id="output" value="" /> <br/>
          <input type="checkbox" name="toggle" value="ToggleCase" onClick="toggleCase(this.form)">Toggle Case<br/>
        </form> 
      </body> 
    </html> 

3 个答案:

答案 0 :(得分:0)

也许你应该看看一些api和howtos,但这是你的代码:

<html> 
<head> 
<script type="text/javascript"> 
function toggleCase() { 
  var text = document.getElementById("input").value;
  var character = new Array(text.length);

  for (i=0, a = text.length; i < a; i++) {
    character[i] = text[i];
    if (character[i] == character[i].toUpperCase){
      character[i] = character[i].toLowerCase();
    }
    else {
      character[i] = character[i].toUpperCase();
    }
  }

  document.getElementById("output").value = character.join('');
}
</script> 
</head> 
<body> 
<p>Enter letters for conversion:</p> 
<form> 
<input type="text" name="input" id="input" value="sample" maxlength="10"><br />
<input type="text" name="output" id="output" value="" /> <br/>
<input type="checkbox" name="toggle" value="ToggleCase" onClick="toggleCase()">Toggle Case<br/>
</form> 
</body> 
</html> 

答案 1 :(得分:0)

function toggleCase() { 
   var str = document.getElementById("input").value;
   for (var i=0; i<str.length; i++) {
     str[i] = (str[i]==str[i].toUpperCase() ? str[i].toLowerCase() : str[i].toUpperCase());
   }
   document.getElementById("output").value = str;
}

这是一个完成工作的for循环。并记住.toUpperCase.toLowerCase是函数

答案 2 :(得分:0)

您可能需要查看String的split方法。

var str = 'foo bar baz';

将字符串转换为char数组的最简单方法是将空字符串传递给split方法。

var charArray = str.split(''):
// charArray === ['f','o','o' ... 'b','a','z']; 

同样是一个FYI,将空格字符传递给split会给你一系列单词。

var wordArray = str.split(' ');
// wordArray === ['foo', 'bar', 'baz'];

我有点不清楚你要解决的问题,但看起来你想要一个函数将大写字母转换成小写字母,反之亦然。

var userInput = document.getElementById('someTextBox');
// If you want to be fancy you could use JQuery
// var userInput = $(#someTextBox').value() 

function toggledCase( str ) {

    var characters = str.split('');
    // The split method still uses iteration so should be able to say it 
    // satisfies the argument of looping through each character.  
    // Split just provides a good abstraction to interface with.

    var toggledCharacters = [];
    var i;
    var ch;
    for( i in characters ) {
        // For in loops on strings will return the indexes instead 
        // of the characters
        ch = characters[i];

        if( ch.toUpperCase() === ch ){
            toggledCharacters.push( ch.toLowerCase() );
        } else {
            toggledCharacters.push( ch.toUpperCase() );
        }

        // If you like one-liners, 
        // the conditional if statement could be replace with a ternay statement.

        //  toggledCharacters.push( ( ch.toUpperCase() === ch ) ? 
        //  ch.toLowerCase() : ch.toUpperCase();
    }

    return toggledCharacters;
}

我的toggledCharacters方法只返回一个字符数组,所以如果你想以字符串形式返回,你可以进行for循环;

var arr = toggledCharacters('Foo'); // str = 'fOO';
var str = '';  

var i, ch;
for ( i in arr ) {
    str += arr[i]; // += is just a short hand notation of saying 
                   //      str = str + arr[i];
}

如果你很懒,喜欢单行,请看一下函数式编程。因为你还在高中,所以它有点超出了范围。

var arr = toggledCharacters('Foo'); // str = 'fOO';
var str = arr.reduce( function(str, ch) {
    return str + ch;
} );

无论如何,这对我来说比老师概述的更清晰。

function toggledCharacters(input) {
    input = input.split('');
    var output = [];

    var i, ch;
    for( i in input ) {
        output.push( ( input[i].toUpper() === input[i] ) ?
            input[i].toLower() : input[i].toUpper()
        );
    }

    return output.reduce( 
        function(str, ch) {
            return str + ch;
        }
    );
}

编辑:

哦,我只是注意到在该代码中没有任何地方是要评估的检查框的布尔值。

var checkBox = document.getElementByName('toggle');
var inputTextBox = document.getElementById('input'); 
var outputTextBox = document.getElementById('output');

var result = inputTextBox.value;

if( checkBox.checked ) {
    result = toggleCase( result );
}

outputTextBox.value = result;

哦,因为你是初学者,所以另一个FYI。确保您知道使用浏览器的控制台。

如果你使用的是Firefox,请抓住firebug应用程序。

Chrome,按Ctrl-Shift-C。

IE也有一个,我只是不在乎使用它。

与制作html演示页面并假设代码正常工作相比,控制台可以更轻松地使用JS进行实验。

另外,这些开发人员工具可以向您展示对象的基础方法。它是学习JS的一种快捷方式。