Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript 객체에서 값이 가장 큰 항목 n개 추출하기

축구 선수의 다양한 능력치를 담고 있는 객체가 있다고 가정해 보겠습니다.

const qualities = {
    defence: 82,
    attack: 92,
    heading: 91,
    pace: 96,
    dribbling: 88,
    tenacity: 97,
    vision: 91,
    passing: 95,
    shooting: 90
};

이번 글에서는 위와 같은 객체와 숫자 n(객체의 키 개수 이하)을 입력받아, 값이 가장 큰 n개의 키-값 쌍으로 구성된 객체를 반환하는 함수를 작성해 보겠습니다.

예를 들어 n = 2일 때의 출력 결과는 다음과 같습니다.

{
    tenacity: 97,
    pace: 96
}

구현 아이디어

핵심 로직은 생각보다 간단합니다. 먼저 Object.keys()로 객체의 모든 키를 배열로 가져온 뒤, sort() 메서드를 활용해 각 키에 대응하는 값을 기준으로 내림차순 정렬합니다. 그다음 정렬된 순서대로 앞에서부터 n개의 키-값 쌍만 새로운 객체에 담아 반환하면 됩니다.

또한 요청한 개수(n)가 객체의 키 개수보다 클 경우에는 false를 반환하도록 예외 처리를 추가하여 함수의 안정성을 높였습니다.

예제

완성된 전체 코드는 다음과 같습니다.

const qualities = {
    defence: 82,
    attack: 92,
    heading: 91,
    pace: 96,
    dribbling: 88,
    tenacity: 97,
    vision: 91,
    passing: 95,
    shooting: 90
};
const pickHighest = (obj, num = 1) => {
    const requiredObj = {};
    if(num > Object.keys(obj).length){
        return false;
    };
    Object.keys(obj).sort((a, b) => obj[b] - obj[a]).forEach((key, ind) =>
    {
        if(ind < num){
            requiredObj[key] = obj[key];
        }
    });
    return requiredObj;
};
console.log(pickHighest(qualities, 3));

출력 결과

n 값에 따라 콘솔에 출력되는 결과는 다음과 같습니다. n = 3일 때는 상위 3개, 기본값인 n = 1일 때는 최댓값 하나만 반환됩니다.

{ tenacity: 97, pace: 96, passing: 95 }
{ tenacity: 97 }
{ tenacity: 97, pace: 96, passing: 95, attack: 92, heading: 91 }