![](/img/trans.png)
[英]Search in an Object Array with more than one condition jQuery grep()
[英]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.