Jquery - 获得3个没有交叉的随机数组元素

时间:2016-02-20 14:22:39

标签: jquery arrays

我正在创建一个应用程序。对于其中的一部分,我需要能够在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

2 个答案:

答案 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
    };
});