이것은 아마도 고전적인 문제 일 것입니다. 각 플레이어의 점수 "사전"이 있습니다.
var scores = {
'player1' : 9,
'player2' : 3,
'player3' : 7,
'player4' : 5
}
나는 이것을 키, 플레이어 수와 값, 플레이어 이름으로 계산 된 위치를 사용하여 리더 보드로 변환하고 싶습니다.
var leaderboard = {
1 : 'player1',
2 : 'player3',
3 : 'player4',
4 : 'player2'
}
임시 목록과 사전을 너무 많이 엉망으로 만들지 않고 어떻게이 작업을 깔끔하게 수행 할 수 있습니까? 감사합니다.
리더 보드에 대한 순서를 얻기 위해 개체의 항목 (사용 Object.entries()
)과 항목 .sort()
을 가져올 수 있습니다. 그런 다음 .map()
정렬 된 항목을 사용 하여 개체에 매핑합니다. 여기서 개체의 값은 플레이어이고 항목의 인덱스 +1 ( i+1
)은 키입니다. 그런 다음을 사용 Object.assign()
하여이 배열에서 더 큰 개체를 만들 수 있습니다 .
const scores = {
'player1' : 9,
'player2' : 3,
'player3' : 7,
'player4' : 5
};
const leaderboard = Object.assign(
{},
...Object.entries(scores)
.sort(([,a], [,b]) => b-a)
.map(([p], i) => ({[i+1]: p}))
);
console.log(leaderboard);
참고 : 필수 출력은 번호가 매겨진 연속 키가있는 개체입니다. 일반적으로 배열을 사용하여 이러한 유형의 데이터를 저장합니다. 여기서 위치 항목 0
이 "상위"리더입니다. 배열 출력의 경우 위 코드를 다음과 같이 단순화합니다.
const scores = {
'player1' : 9,
'player2' : 3,
'player3' : 7,
'player4' : 5
};
const leaderboard = Object.entries(scores)
.sort(([,a], [,b]) => b-a)
.map(([p]) => p)
console.log(leaderboard);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다