是否有更快的方式来编写这个字符串

时间:2011-11-16 23:09:11

标签: javascript arrays string projects

如果用户点击“获取会话ID”按钮,会发生什么。它显示一个代表sessionId的随机字符串。这很好用。我的问题是,我有5个字符串,分别是“AAA”,“AAB”,“AAC”,“AAD”和“AAE”。现在我希望字符串一直到“ZZZ”。

我需要一个年龄和大量的编码来写出从“AAA”到“ZZZ”的所有字符串。我想知道的是,有没有办法可以显示“AAA”和“ZZZ”之间的所有字符串而无需手动输入所有字符串?

以下是我的代码:

<head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <title>Create a Session</title>
        <script type="text/javascript">

var randomStrings = [
        "AAA",
        "AAB",
        "AAC", 
        "AAD",
        "AAE",
    ];

    function getSession() {

var randomDiv = document.getElementById("randomStrings");

          randomIndex = Math.round(Math.random()*(randomStrings.length-1));
          newText = randomStrings[randomIndex];
          randomDiv.innerHTML = newText;
}

</head>

<body>
<form action="create_session.php" method="post" name="sessionform">
 <table>
          <tr>
          <th>1: </th>
          <td><input id="sessionBtn" type="button" value="Get Session ID" name="sessionid" onClick="getSession()" /></td>   <!-- Get Session ID here-->
          <td id="randomStrings"></td>
          </tr>
          </table>
</form>
</body>

7 个答案:

答案 0 :(得分:4)

function randLetter()
{
    return String.fromCharCode(65 + Math.round(Math.random()*25));
}

...

var newText = randLetter() + randLetter() + randLetter();

只需使用这样的功能。

http://jsfiddle.net/kgjcE/

答案 1 :(得分:2)

对于你在这里所做的事情,生成所有可能的字符串,然后随机选择一个字符串将比现在更昂贵。如果你这样做,你将不得不生成17,576(26 ^ 3)个字符串,仅用于一个随机的三个字母的字符串。相反,您可以只生成一个随机字符串,一次只生成一个字符。

var alphabet = [ "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ];

function generateRandomString(strLength) {
    var output = "";
    for (var i = 0; i < strLength; i++) {
        var randomIndex = Math.floor(Math.random() * alphabet.length);
        output += alphabet[randomIndex];
    }
    return output;
}

function getSession() {
    var randomDiv = document.getElementById("randomStrings");
    newText = generateRandomString(3);
    randomDiv.innerHTML = newText;
}

此解决方案也可以更好地扩展。要生成所有可能的字符串并选择一个,您的运行时将是O(26^n),其中n是字符串中的字符数。此解决方案的运行时(按字符构建字符串)为O(n),其中n是字符串中的字符数。

这意味着如果您确定需要更多会话ID(如果有更多用户使用您的应用程序),您可以轻松完成。如果您事先构建所有可能性,则5个字符的会话ID将需要11,881,376次迭代。这需要5次迭代才能在运行中构建一种可能性。

答案 2 :(得分:1)

此功能有效:

function getStrings(){
    var strings = [];
    var start = 65;
    var end = 91;
    for (var a = start; a < end; a++) {
            for (var b = start; b < end; b++) {
                    for (var c = start; c < end; c++) {
                            strings.push(String.fromCharCode(a)+String.fromCharCode(b)+String.fromCharCode(c));
                    }
            }
    }
    return strings;
}

但Jonathan Newmuis的回答要好得多。

答案 3 :(得分:1)

不要将所有可能的组合存储在数组中。

只需生成所需的字符串。

function gen_str( len ) { 
    var str = '';
    while( len-- )
        str += String.fromCharCode( ~~(Math.random() * 26) + 65 );
    return str;
}

var rand_str = gen_str( 3 );  // "AHY"

答案 4 :(得分:0)

试试这个

http://jsfiddle.net/snJeX/

var strings = [];
for (var a = 0x41; a < 0x5b; a++) {
    for (var b = 0x41; b < 0x5b; b++) {
        for (var c = 0x41; c < 0x5b; c++) {
            strings.push(
                String.fromCharCode(a) +
                String.fromCharCode(b) +
                String.fromCharCode(c));
        }
    }
}

答案 5 :(得分:0)

这是对Jonathan功能的轻微改进/简化:

var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

function generateRandomString(strLength) {
    var output = "";
    for (var i = 0; i < strLength; i++) {
        var randomIndex = Math.floor(Math.random() * alphabet.length);
        output += alphabet.charAt(randomIndex);
    }
    return output;
}

function getSession() {
    var randomDiv = document.getElementById("randomStrings");
    newText = generateRandomString(3);
    randomDiv.innerHTML = newText;
}

答案 6 :(得分:-2)

也许使用这样的函数,然后调用它三次:

string GetCharacter(int index)
{
  switch(index)
  {
    case 1: return "A";
    case 2: return "B";
    ...
    ...
    case 27: return "Z"  
  }
}