如果用户点击“获取会话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>
答案 0 :(得分:4)
function randLetter()
{
return String.fromCharCode(65 + Math.round(Math.random()*25));
}
...
var newText = randLetter() + randLetter() + randLetter();
只需使用这样的功能。
答案 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)
试试这个
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"
}
}