![](/img/trans.png)
[英]JavaScript finding the highest value in array of arrays and printing the winning array
[英]finding highest value in an array of objects not exceeding a certain value - Javascript
我有一系列對象,想要找到分數最高但又不超過特定分數(例如20分)的玩家。 我該怎么做?
let playerScores = [
{ player: 'Dealer',
score: 19,
cards: 'A of ♥, 5 of ♦' },
{ player: 'Player1',
score: 18,
cards: '10 of ♦, 8 of ♦' },
{ player: 'Player2',
score: 23,
cards: '6 of ♦, 6 of ♥, J of ♠' }
]
console.log(playerScores)
// iterates through playerScores
for (let i in playerScores) {
if (playerScores[i].score > 20) {
console.log(playerScores[i].player + ' BUSTED!')
// removes the object with a score over 21 from the array
playerScores.splice(i,1)
}
return playerScores
}
您可以先過濾數據,然后按分數排序,然后采用第一個數據:
let filteredData = playerScores.filter(p=>p.score<=20).sort((a,b) => b.score-a.score);
let result = filteredData.length ? filteredData[0] : undefined;`
一個簡單的解決方案是使一個函數獲得極限得分並迭代palyerScores的元素,然后找到匹配元素,請參見下面的示例
let playerScores = [ { player: 'Dealer', score: 19, cards: 'A of ♥, 5 of ♦', }, { player: 'Player1', score: 18, cards: '10 of ♦, 8 of ♦', }, { player: 'Player2', score: 23, cards: '6 of ♦, 6 of ♥, J of ♠', }, ]; function getHighestScore(limitScore) { let highestScore = 0; let player = {}; for (let i = 0; i < playerScores.length; i++) { if ( playerScores[i].score > highestScore && playerScores[i].score < limitScore ) { highestScore = playerScores[i].score; player = Object.assign({}, playerScores[i]); } } return player; } let highsetScorePlayerNotExced20 = getHighestScore(20); console.log(highsetScorePlayerNotExced20);
您可以使用條件的鏈式檢查,並在必要時將對象添加到結果集中,或將其替換為得分較高的對象。
var playerScores = [{ player: 'Dealer', score: 19, cards: 'A of ♥, 5 of ♦' }, { player: 'Player1', score: 18, cards: '10 of ♦, 8 of ♦' }, { player: 'Player2', score: 23, cards: '6 of ♦, 6 of ♥, J of ♠' }], value = 20, result = playerScores.reduce(function (r, o) { if (o.score >= value) { return r; } if (!r.length || r[0].score < o.score) { return [o]; } if (r[0].score === o.score) { r.push(o); } return r; }, []); console.log(result);
let playerScores = [
{ player: 'Dealer',
score: 19,
cards: 'A of ♥, 5 of ♦' },
{ player: 'Player1',
score: 18,
cards: '10 of ♦, 8 of ♦' },
{ player: 'Player2',
score: 23,
cards: '6 of ♦, 6 of ♥, J of ♠' }
];
const maxLimit = 20;
const maxScorePlayer = playerScores.reduce((prev, current) => {
if (current.score >= maxLimit) {
return prev;
}
return (prev.score > current.score) ? prev : current
}, { });
您可以在此處檢查reduce函數的工作方式
let playerScores = [ { player: 'Dealer', score: 19, cards: 'A of ♥, 5 of ♦' }, { player: 'Player1', score: 18, cards: '10 of ♦, 8 of ♦' }, { player: 'Player2', score: 20, cards: '6 of ♦, 6 of ♥, J of ♠' } ]; var highestScore = Math.max.apply(Math,playerScores.map(function(o){ score = 0; if(o.score != 20) { score = o.score; } return score; })); console.log(highestScore);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.