1

我正在生成一个随机数列表。每个随机数都被添加到一个数组中,但我想检查相同的数字是否输入了两次。我在尝试让 if 语句与此一起使用时遇到了很多麻烦,并且不确定我做错了什么。

我创造了:

//INITIALISE VARS, ARRAYS
var uniquearr = [];
i = 0;

while (i < 30){

    var min = 0;
    var max = 29;
    var random = Math.floor(Math.random() * (max - min + 1)) + min;

    //SEARCH UNIQUE ARRAY FOR EXISTING
    if (jQuery.inArray(random, uniquearr) > -1){

        //ADD NUMBER TO UNIQUE ARRAY
        uniquearr.push(random);

        //*DO SOMETHING*

    } //END IF

    i++;

} //END WHILE

但是 if 语句永远不会触发。谁能指出我正确的方向?

4

2 回答 2

3

需要测试随机数是否在数组中存在;只有这样才能将其添加到数组中。

逻辑的另一个问题是,您没有添加 30 个唯一数字,因为i变量在if条件之外递增。在这里您不必使用不同的循环变量,因为您可以检查目标数组是否具有所需的大小

//INITIALISE VARS, ARRAYS
var uniquearr = [], min = 0, max = 29;

//SEARCH UNIQUE ARRAY FOR EXISTING
while (uniquearr.length < 30){
    var random = Math.floor(Math.random() * (max - min + 1)) + min;
    if (jQuery.inArray(random, uniquearr) == -1){
        uniquearr.push(random);
    }//END IF

}//END WHILE

console.log('uniquearr', uniquearr)
于 2013-07-08T06:42:02.460 回答
2

那是因为你的if语句总是false,你的数组是空的,结果$.inArray 总是返回-1,你应该检查返回的值是否是 -1 。

while (uniquearr.length < 30) { // uniquearr.length !== 30
    var min = 0,
        max = 29,
        random = Math.floor(Math.random() * (max - min + 1)) + min;
    //SEARCH UNIQUE ARRAY FOR EXISTENCE
    if (jQuery.inArray(random, uniquearr) === -1) {
        //ADD NUMBER TO UNIQUE ARRAY
        uniquearr.push(random);
    } 
} 

http://jsfiddle.net/zzL7v/

于 2013-07-08T06:44:10.190 回答