我正在创建一个应用程序。对于其中的一部分,我需要能够在1个函数中拉出3个随机数组元素,而不会重复3个
示例:
var arr = ["1","2","3","4","5","6","7","8","9","10]
$("#button").click(function()
{
rand = Math.floor((Math.random() * arr.length));
$("text1").text(arr[rand]);
rand = Math.floor((Math.random() * arr.length));
$("text2").text(arr[rand]);
rand = Math.floor((Math.random() * arr.length));
$("text3").text(arr[rand]);
})
我已经重复了3次随机发生器,因为如果我没有这个数字保持不变。这个问题是随机数生成器可以多次拉出相同的数字。有没有办法避免这种情况发生?
如果这是一个愚蠢的问题,我很抱歉,但没有出现在建议的问题中。
编辑:每个请求添加的HTML
<html>
<head>
</head>
<body>
<div data-role="page" id="menu">
<div data-role="header">
<div data-role="navbar">
<p><h2 align="center">App Name</h2></p>
</div>
</div>
<div data-role="content">
<div>
<h1 style="font-size:50px" align="center" id="name"></h1>
</div>
<div style="padding-top:30px">
<h1 align="center" id="q"></h1>
</div>
<div style="padding-top:50px">
<p align="center"><a style="font-size:22px" id="text1"></a></p>
<p align="center"><a style="font-size:22px" id="text2"></a></p>
<p align="center"><a style="font-size:22px" id="text3"></a></p>
</div>
<div style="padding-top:50px">
<h3 align="center" id="counter"></h3>
</div>
</div>
<div data-role="footer" data-position="fixed">
<div data-role="navbar">
<ul>
<li><a id="t">Restart</a></li>
<li><a id="qu">Quit</a></li>
</ul>
</div>
</div>
</div>
</body>
</html
答案 0 :(得分:2)
你可以创建一个radmoize值数组
像这样var temp=[];
while(temp.length<3){
rand = Math.floor((Math.random() * arr.length));
if(temp.indexOf(arr[rand])<0){
temp.push(arr[rand])
}
}
然后将随机化值添加到您的视图
$("text1").text(temp[0]);
$("text2").text(temp[1]);
$("text3").text(temp[2]);
的 DEMO
强>
你也错过了#34;在你的数组的末尾(可能是拼写错误)
var arr = ["1","2","3","4","5","6","7","8","9","10]
^
here
答案 1 :(得分:1)
您可以创建数组的副本,并删除随机选择的元素:
var arr = ["1","2","3","4","5","6","7","8","9","10"]; // fix end here
$("#button").click(function() {
var arr2 = arr.slice(0); // clone array
for (var i = 1; i < 4; i++) { // loop to avoid code duplication
rand = Math.floor((Math.random() * arr2.length));
$("text" + i).text(arr2[rand]);
arr2.splice(rand, 1); // remove selected element
};
});