【发布时间】:2015-05-24 00:41:40
【问题描述】:
我正在想办法用纯 JS 从数组中拉出一个随机字符串,而同一字符串不会连续出现两次。
我使用随机数 (random number) 使用随机数的索引从 randomMsg 中提取随机字符串,然后将其存储在 currentMsg 中。
点击后,我将使用新的随机字符串重新定义currentMsg。然后我使用if/else 语句来查看我们的prevMsg 是否等于currentMsg,如果是(不是第一次点击),我正在使用另一个if /else 语句来增加或减少我们的索引,因此它返回一个唯一的字符串 (anotherMsg) 到我们的 HTML 并将 prevMsg var 设置为该字符串。
否则,它将 currentMsg 返回到我们的 HTML,并将 prevMsg 设置为等于 currentMsg。
功能如下:
(function message() {
var ranNumber = Math.floor((Math.random() * 5) + 0);
var randomMsg = [
"string one",
"string two",
"string three",
"string four",
"string five"
];
var currentMsg = randomMsg[Math.floor((Math.random() * 5) + 0)];
var prevMsg = "";
document.getElementById("intro").innerHTML = currentMsg;
document.getElementById("intro").onclick = function() {
var ranNum = Math.floor((Math.random() * 5) + 0);
currentMsg = randomMsg[ranNum];
if(prevMsg == currentMsg) {
var anotherMsg = "";
if(ranNum >= 0 && ranNum < 4) {
anotherMsg = randomMsg[ranNum + 1];
}
else {
anotherMsg = randomMsg[ranNum - 1];
}
document.getElementById("intro").innerHTML = anotherMsg;
prevMsg = anotherMsg; // set prevMsg to anotherMsg
} else {
document.getElementById("intro").innerHTML = currentMsg;
prevMsg = currentMsg; // set prevMsg to currentMsg
};
};
})();
我还设置了JSFiddle here。
虽然它有效,但我现在很想知道是否有更优雅的方法来编写这样的函数。另外我要替换整个字符串,是只替换单词(一、二、三等)更好还是一点都不重要?
感谢任何帮助。提前致谢!
【问题讨论】:
-
因为“它有效,”并且您的问题需要审核,我建议您在Code Review 上提问,而不是在Stack Overflow 上提问。跨度>
标签: javascript string random