2013-07-08 3 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

Вам необходимо проверить, существует ли в массиве случайное число нет; только тогда он должен быть добавлен в массив.

Еще одна проблема с логикой заключалась в том, что вы не добавляли 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) 
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

лучший ответ _code_, но теперь, пожалуйста, на самом деле скажите OP, что он сделал не так. – Alnitak

+0

, если вы проверите длину массива, удалите 'i ++;', а также удалите ';' в конце while и if blocks ... – Givi

+0

@ Givi Да, это было излишним, спасибо. – undefined

Смежные вопросы