Перебирать существующих пользователей, пока один из них не найден - PullRequest
1 голос
/ 22 апреля 2020

Я просто бездельничаю, но столкнулся с проблемой. Я пытаюсь создать имя пользователя, когда пользователь нажимает на элемент div на странице.

Я хочу, чтобы он сохранял имена пользователей в массиве. Если имя пользователя уже существует в массиве, я хочу, чтобы оно перезапустило функцию, чтобы создать новое имя пользователя, пока оно не найдет несуществующее имя, а затем поместить его в массив.

Мне просто не может показаться тренировки, как этого добиться. Может ли кто-нибудь помочь, пожалуйста? Спасибо

$(document).ready(function() {
  jQuery(function() {
    var usernames = [];

    function createUser() {
      var i = Math.floor((Math.random() * 10) + 1);
      var newUser = "Username" + i;
      return newUser;
    }

    $(".CreateUser").click(function() {
      var newUser = createUser();
      if (jQuery.inArray(newUser, usernames) !== -1) {
        newUser = createUser();
        console.log("User Exists");
      } else {
        usernames.push(newUser);
        $(".Usernames").append("<br>" + newUser);
        console.log(usernames);
        console.log("User Added");
      }
    });
  });
});

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Может быть временем для do/while l oop:

do {
  var newUser = createUser();
} while (jQuery.inArray(newUser, usernames) !== -1)

usernames.push(newUser);

l oop будет продолжать создавать новые случайные имена пользователей, пока не найдет имя, которое не существует в массиве. Затем он разбивает l oop и помещает эту фамилию в массив.

0 голосов
/ 22 апреля 2020

Мы можем использовать пока l oop, но я не рекомендую это делать с вашей функцией, поэтому лучший способ сделать функцию с начальным значением, чтобы при каждом нажатии кнопки имя пользователя менялось.

function createUser(i) {
  var newUser = "Username" + i;
  return newUser;
}

$(document).ready(function () {
  var usernames = [];
  //initial value 
  var i = 1;

  $(".CreateUser").click(function () {
    var newUser = createUser(i);
   //increase the initial value so next username will be increased by 1
    i += 1;
    usernames.push(newUser);
    $(".Usernames").append("<br>" + newUser);
    console.log(usernames);
    console.log("User Added");
  });
});

проверьте этот пример Я сделал это настолько просто, насколько смог.

чтобы проверить массив, вы можете использовать метод include

var user_in_array = usernames.includes(newUser) // returns true of false 

для генерации случайной строки и проверки ее наличия


function createUser() {
  var random_txt = Math.random().toString(36).substring(2);
  var newUser = "Username_" + random_txt;
  return newUser;
}

$(document).ready(function () {
  var usernames = [];
  //initial value

  $(".CreateUser").click(function () {
    var newUser = createUser();
    //increase the initial value so next username will be increased by 1

    while (usernames.includes(newUser)) {
      newUser = createUser();
    }
    usernames.push(newUser);
    $(".Usernames").append("<br>" + newUser);
    console.log(usernames);
    console.log("User Added");
  });
});

рабочий пример здесь

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