循环函数内部直到达到目标

时间:2016-07-05 16:23:24

标签: javascript node.js function while-loop

我有一组名为randomUserArray的用户。从那里我想检索一个随机用户并传递它。如果所选用户与clientNickname相同,我需要重新启动该函数,因此它不会返回randomRecipient,也就是clientNickname。现在我的功能无论如何都将返回它们。

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"。 如果它不是,意思是

randomRecipient == clientNickname

我有控制台打印错误。它现在做了。

2 个答案:

答案 0 :(得分: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"));

答案 1 :(得分: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)];
...
..

这样的事情很简洁明了。不需要递归函数调用。