2013-07-08 31 views
1

我正在生成一个随机数列表。每个随机数都被添加到一个数组中,但我想检查相同的数字是否输入两次。我在尝试使用if语句来处理这个问题时遇到了很多麻烦,我不知道我做错了什么。如何正确创建JQuery inArray 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 

但如果语句根本不会触发。任何人都可以将我指向正确的方向吗?

+1

也许你应该检查'如果(jQuery.inArray(随机,uniquearr)<0){}' – Givi

+0

他也应该用正确的代码缩进,这应该已经对错误的' END IF'行和'END WHILE'行显而易见。 – Alnitak

+1

您的条件反转,如果它已经存在于数组中,它将只添加“random”。 –

回答

3

您需要测试数组中是否存在随机数而不是;只有它应该被添加到数组中。

此外,逻辑的另一个问题是,由于i变量在if条件之外递增,所以始终没有添加30个唯一编号。在这里,您不必使用不同的循环变量,因为你可以检查目标阵列是否需要大小

//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) 
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/

+1

best _code_ answer,但现在请告诉OP他做错了什么。 – Alnitak

+0

如果你检查数组的长度,删除'i ++;',并且还可以在结尾删除';',如果块... – Givi

+0

@Givi是的,这是多余的,谢谢。 – undefined