我有这个示例代码
var randFriend = friendList[Math.floor(Math.random() * friendList.length)];
if (randFriend == admin) {
//Here
}
else if (randFriend != admin) {
client.removeFriend(randFriend);
}
如果if randfriend == admin
再次执行var randFriend = friendList[Math.floor(Math.random() * friendList.length)];
并再次检查if(randFriend == admin)
,该怎么办?换句话说,再次重启。
我认为它完成了回归,但我不知道。感谢
答案 0 :(得分:1)
我不会在随机条件下使用递归或循环,因为估计运行时会遇到问题,如果用例发生变化并且你想要忽略更多元素,那么找到正确元素的概率会减少。
更好的想法是过滤数组以删除要忽略的元素,然后从该列表中选择一个随机元素。
var nonAdminList = friendList.filter(person => person != admin);
if( nonAdminList.length === 0 ) {
throw new Error('no non admin persons available');
}
client.removeFriend(nonAdminList[Math.floor(Math.random() * nonAdminList.length)]);
答案 1 :(得分:0)
如果我正确理解了这个问题,你可以使用while循环来保持随机化,直到没有选择管理员
var friendAdmin = true;
var randFriend;
while(friendAdmin){
randFriend = friendList[Math.floor(Math.random() * friendList.length)];
if(randFriend != admin) friendAdmin = false;
}
client.removeFriend(randFriend);
答案 2 :(得分:0)
我会将您的代码放入一个函数中,以便您可以重复调用该函数。例如:
function choose(){
var randFriend = friendList[Math.floor(Math.random() * friendList.length)];
if(randFriend == admin){
choose(); //this repeats the choose function, which will run the random friend code again
}
else if(randFriend != admin){
client.removeFriend(randFriend);
return; //this exits the function
}
}