2017-12-30 85 views
1

개체 배열을 가지며 특정 점수 (예 : 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 
} 
+0

코드를 어떻게 작동하지 않습니다 작동? –

+0

점수가 가장 높은 플레이어를 찾아야합니다.이 경우 딜러는 점수가 19 점입니다. – Evelina

+0

예! 20보다 낮은 점수를 얻은 플레이어를 찾고 싶습니다. – Evelina

답변

1

간단한 해결 방법은 제한 점수를받는 함수를 만들고 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);

아래의 예에서 일치하는 요소 모양을 찾을 수 있습니다
3

먼저 데이터를 필터링하고 점수별로 정렬 한 다음 첫 번째 데이터를 취할 수 있습니다.

let filteredData = playerScores.filter(p=>p.score<=20).sort((a,b) => b.score-a.score); 
let result = filteredData.length ? filteredData[0] : undefined;` 
1

조건의 체인 검사를 사용하고 필요한 경우 개체를 결과 집합에 추가하거나 개체를 높은 점수로 대체 할 수 있습니다.

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);

0
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 
}, { }); 

당신은 기능을 줄이는 방법을 확인할 수는 here

0

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);