Is there a faster way to write this strings

Refresh

November 2018

Views

403 time

1

What happens is that if a user clicks on the 'Get Session Id' button. It displays a random string which will represent the sessionId. This works fine. My problem is that at moment I have 5 strings which are "AAA", "AAB", "AAC", "AAD" and "AAE". Now I want the strings to go on all the way to "ZZZ".

It will take me an age and a lot of coding to write out all of the strings from "AAA" to "ZZZ". What I want to know is that is there a way where I can display all the strings between "AAA" and "ZZZ" without requiring entering in all of the strings manually?

Below is my code:

<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 answers

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;
}

но ответ от Джонатана Newmuis гораздо лучше.

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"
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));
        }
    }
}
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), где п число символов в строке. Выполнения этого решения (построение строки символов по характеру) O(n), где п число символов в строке.

Это означает, что если вы решите, что вам нужны больше идентификаторов сеансов (если больше пользователей используют приложение), вы можете сделать это легко. В 5-символьный идентификатор сеанса будет принимать 11,881,376 итераций, если вы должны были построить все возможности заранее. Понадобится 5 итераций строят одну возможность на лету.

0

Вот небольшое повышение / упрощение функции Джонатана:

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;
}
-2

Может быть, с помощью функции, как это, и называя его три раза:

string GetCharacter(int index)
{
  switch(index)
  {
    case 1: return "A";
    case 2: return "B";
    ...
    ...
    case 27: return "Z"  
  }
} 
4
function randLetter()
{
    return String.fromCharCode(65 + Math.round(Math.random()*25));
}

...

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

Просто используйте функцию вроде этого.

http://jsfiddle.net/kgjcE/