簡體   English   中英

在具有一個條件的數組中搜索值

[英]Search for values ​in an array with one condition

我有一組玩家

所以我想創建一個函數來根據條件相互匹配

我開始思考(獲得隊列中的第一個玩家)並嘗試找到另一個滿足條件的玩家

但后來我想:如果我不匹配第一個玩家,我將永遠不會移動到第二個匹配

基本上我需要從隊列中獲得 2 個滿足條件的玩家,無論他們在隊列中的位置如何

  searching(id) {
    const firstPLayer = this.players.find(p => p.id == id)
    const { mmr } = firstPLayer
    const secondPlayer = this.players.find((playerTwo) => playerTwo.mmr < (5 / 100) * mmr + mmr && playerTwo.mmr > mmr - ((5 / 100) * mmr) && playerTwo.id != firstPLayer.id);
    if(!secondPlayer){
      return null;
    }
    const matchedPlayers = [
      firstPLayer,
      secondPlayer
    ]
    // remove matched players from this.players
    this.removePlayers(matchedPlayers);
    // return new Match with matched players
    return matchedPlayers;
  }

像這樣,我有兩個條件|:

playerTwo.mmr <(5/100) * mmr + mmr && playerTwo.mmr> mmr - ((5/100) * mmr)

但是如果我需要在不超過第一個玩家的情況下獲取兩個具有此條件的玩家

很難說為什么它對您不起作用(您確定在您的球員列表中甚至有 2 名球員符合您的參數嗎?)。

您可以使用以下示例來幫助您,因為它似乎對我有用。

 class Queue { constructor() { this.players = fetchPlayers(); } removePlayers(playersToRemove) { playersToRemove.forEach(player => { const index = this.players.indexOf(player); this.players.splice(index, 1); }) } getRandomPlayer() { return this.players[Math.floor(Math.random() * this.players.length)]; } calculateLessThanPercentage(player) { return 5 / 100 * player.mmr + player.mmr } calculateGreaterThanPercentage(player) { return player.mmr - 5 / 100 * player.mmr } searching() { const firstPlayer = this.getRandomPlayer(); const secondPlayer = this.players.find( playerTwo => playerTwo.mmr < this.calculateLessThanPercentage(firstPlayer) && playerTwo.mmr > this.calculateGreaterThanPercentage(firstPlayer) && playerTwo.id != firstPlayer.id ); if (!secondPlayer) { return null; } const matchedPlayers = [firstPlayer, secondPlayer]; this.removePlayers(matchedPlayers); return matchedPlayers; } } const ActiveQueue = new Queue(); const getPlayersButton = document.getElementById("getPlayers"); const playersResults = document.getElementById("players"); const allPlayers = document.getElementById("allPlayers"); getPlayersButton.addEventListener("click", () => { getPlayers(ActiveQueue, playersResults, allPlayers) }); // getPlayersButton click event handler function getPlayers(queue, resultsElement, allPlayersElement) { const searchResults = queue.searching(); resultsElement.innerHTML = JSON.stringify(searchResults, null, 2); allPlayersElement.innerHTML = "Remaining Players: " + JSON.stringify(queue.players, null, 2); } // to get data function fetchPlayers() { return [ { name: "Player One", id: 1, mmr: 500 }, { name: "Player Two", id: 2, mmr: 800 }, { name: "Player Three", id: 3, mmr: 810 }, { name: "Player Four", id: 4, mmr: 815 }, { name: "Player Five", id: 5, mmr: 510 }, { name: "Player Six", id: 6, mmr: 540 }, { name: "Player Seven", id: 7, mmr: 530 }, { name: "Player Eight", id: 8, mmr: 520 } ]; }
 button { margin-top: 10px; }
 Click to get players (scroll all the way down to see remaining players) <br /> <button id="getPlayers">Get Players</button> <pre id="players"></pre> <br /> <hr /> <pre id="allPlayers"></pre>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM