簡體   English   中英

在不超過特定值的對象數組中找到最大值-Javascript

[英]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.

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