2016-07-05 3 views
0

У меня есть массив пользователей под названием randomUserArray. Оттуда я хочу получить случайного пользователя и передать его. Если выбранный пользователь совпадает с clientNickname, мне нужна функция, чтобы начать работу, поэтому она не возвращает randomRecipient, а также clientNickname. Сейчас моя функция вернет их в любом случае.Looping внутри функции до достижения цели

function randomRecipientCalc (clientNickname){ 

    var randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

    while (randomRecipient == clientNickname) { 

    randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

    } 

    return randomRecipient; 

} 

Допустим, у меня есть два пользователя в моем массиве (которым будет минимум в любой момент времени)

`var randomUserArray = ["user1","user2"]` 

и «user1», также являющийся клиентом

var clientNickname = "user1" 

затем Я использую

var Recipient = randomRecipientCalc(); 

для получения пользователь выбрал функцию. В этом случае он должен быть «user2». Если ins't, то есть

randomRecipient == clientNickname 

У меня есть консольная печать об ошибке. Это происходит прямо сейчас.

+0

Если (randomRecipient == clientNickname) {return randomRecipientCalc (clientNickname);} else {return randomRecipient) – user3791775

+0

Вы можете упростить это, используя цикл 'do'-'while', но он работает? Пожалуйста, разместите свой ввод, который не работает. – Bergi

+0

Обратите внимание, что вы получите бесконечный цикл (или максимальный диапазон стека, с ответом @ user3791775) с одноэлементным массивом пользователей. – nrabinowitz

ответ

0

Вы можете упростить проблему путем удаления дубликатов элемента. Пример:

var temporaryRandomUserArray = randomUserArray.filter(function(ele) { 
    return !(ele === clientNickname); // keep if ele not equal to clientNickname 
}); 
temporaryRandomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 
... 
.. 

Что-то вроде этого аккуратно и ясно. Нет необходимости в вызове рекурсивной функции.

+0

Да, действительно. 100+ пробуют и не дублируют пользователей. Кажется, работает! Большое спасибо! – somejonus

0

Ваш код работает для меня:

var randomUserArray = ["b","b","b","c","b","b"]; 

    function randomRecipientCalc (clientNickname){ 

     var randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

     while (randomRecipient == clientNickname) { 

     randomRecipient = randomUserArray[Math.floor((Math.random() * randomUserArray.length) + 0)]; 

      } 

      return randomRecipient; 

     } 

     console.log(randomRecipientCalc("b")); 
+0

Я думаю, вы неправильно поняли, что должна была выполнять функция. Спасибо, в любом случае! – somejonus

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