Как исключить рандомизацию пользователя с помощью Math.random (), если он уже существует в базе данных - PullRequest
0 голосов
/ 31 марта 2020

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

Теперь мы хотим убедиться, что понравившийся вам пользователь не будет рандомизирован и, следовательно, не будет отображаться на странице.

Пользователи, которые были избранное сохраняется в массиве с именем match в базе данных для каждого пользователя. Пользователи, которые играют в одну и ту же игру, сохраняются в массиве с именем numOfMatches. Так что это numOfMatches, которые мы используем для рандомизации пользователя.

Я думаю, мне нужно l oop через numOfMatches и массив совпадений в базе данных, чтобы увидеть, есть ли пользователь в numOfMatches в базе данных. Если это так, мне нужно удалить пользователя из numOfMatches, чтобы он не был включен в код Math.random.

Я пытался использовать этот код в последней функции в этом посте, но у меня возникла проблема с пониманием того, как добраться до элементов в массиве совпадений в объекте users и как использовать splice (и в какой функции Я должен разместить код, так как мы используем обратные вызовы, которые я считаю немного хитрыми):

for(let i = 0; i < numOfMatches.length; i++) {
    for(let j = 0; j < users[j].match.length; j++) {
        if(numOfMatches[i] === users[j].match) {
          let position = numOfMatches.indexOf(randomUser)
             numOfMatches.splice(position, 1)
        }
    }
}

Я очень благодарен за идеи и предложения.

Пример из базы данных:

{
   "username":"bobox",
   "email":"bobox@hotmail.com",
   "password":"test234",
   "gender":"Man",
   "age":"17",
   "city":"Jönköping",
   "games":"Battlefield V",
   "usernameDiscord":"bigbox",
   "usernameSteam":"bigbox",
   "usernameOrigin":"bobox",
   "match":[
      "carro",
      "arooma",
      "gamer_girl"
   ],
   "_id":"WRa86pRsVex6NBe2"
}

function renderMatches(users) {
    let bigDiv = document.querySelector(".TheBigDiv")
    let matches = document.querySelector(".Match__List")
    let matchGames = document.querySelector(".Match__Games")
    let matchButton = document.querySelector(".Match__Button")
    let noMatch = document.createElement("h3")

    matchButton.addEventListener("click", async(event) => {
        hanna(users)
    })
}

function randomMatches(numOfMatches, users) {
    let bigDiv = document.querySelector(".TheBigDiv")
    let matches = document.querySelector(".Match__Lis")
    console.log("numOfMatches:", numOfMatches)

    bigDiv.innerHTML = ""
    console.log("Funkar här")
    let newClone = matches.cloneNode(true)
    let randomUser = numOfMatches[Math.floor(Math.random() * numOfMatches.length)]

    newClone.querySelector('.Match-Username').innerHTML = randomUser.username
    newClone.querySelector('.Match-Age').innerHTML = randomUser.age
    newClone.querySelector('.Match-Game').innerHTML = "Spelar:" + " " + randomUser.games
    newClone.classList.remove("Prototype")
    bigDiv.append(newClone)

    likeUser(randomUser, users)
}


function hanna(users) {
    console.log(users)
    let numOfMatches = []
    let matchGames = document.querySelector(".Match__Games")
    let matches = document.querySelector(".Match__Lis")
    let bigDiv = document.querySelector(".TheBigDiv")
    let noMatch = document.createElement("h3")
    for (let j = 0; j < users.length; j++) {
        let currentUser = users[j]
        let UserID = currentUser._id
        let gejm = matchGames.querySelector(".gejms").value
        if (currentUser.games == gejm) {
            console.log("users:", currentUser)
            console.log(currentUser._id)
            numOfMatches.push(currentUser)
            console.log("hej")
            randomMatches(numOfMatches, users)

        }
    }
    if (numOfMatches.length == 0) {
        noMatch.innerHTML = "No matches found"
        bigDiv.append(noMatch)
    }

}

1 Ответ

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

Вот простой пример.

const candidate = [1,2,3,4,5,6,7,8,9,0]
const exclude = [1,3,7]

let target = candidate.filter(x=>!exclude.includes(x))
console.log(target)

console.log(target[Math.floor(Math.random() * target.length)])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...