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

자바스크립트로 배열에서 가장 큰 값 n개 추출하기

문제 상황

숫자 배열을 첫 번째 인수로, 정수 n을 두 번째 인수로 받는 자바스크립트 함수를 작성해야 합니다. 이 함수는 배열에서 가장 큰 값 n개를 골라내어, 해당 숫자들만으로 구성된 새로운 배열을 반환해야 합니다.

구현 방법

가장 간단하고 직관적인 접근 방식은 다음과 같습니다.

  1. 원본 배열이 변경되지 않도록 slice()로 복사본을 만듭니다.
  2. 복사본을 내림차순으로 정렬합니다.
  3. 정렬된 배열의 앞부분에서 n개의 요소를 잘라내어 반환합니다.

예제 코드

이를 구현한 코드는 다음과 같습니다.

const arr = [3, 4, 12, 1, 0, 5, 22, 20, 18, 30, 52];
const pickGreatest = (arr = [], num = 1) => {
   if(num > arr.length){
      return [];
   }
   const sorter = (a, b) => b - a;
   const descendingCopy = arr.slice().sort(sorter);
   return descendingCopy.splice(0, num);
};
console.log(pickGreatest(arr, 3));
console.log(pickGreatest(arr, 4));
console.log(pickGreatest(arr, 5));

실행 결과

콘솔에 출력되는 결과는 다음과 같습니다.

[ 52, 30, 22 ]
[ 52, 30, 22, 20 ]
[ 52, 30, 22, 20, 18 ]

코드 설명

  • 유효성 검사: 요청한 개수(n)가 배열 길이보다 크면 빈 배열을 반환하여 오류를 방지합니다.
  • sorter 함수: b - a를 반환하도록 작성하여 배열을 내림차순으로 정렬합니다.
  • slice(): 원본 배열의 복사본을 생성하므로, 정렬 과정에서 원본 데이터가 변경되지 않습니다.
  • splice(0, num): 내림차순으로 정렬된 배열의 처음 n개 요소, 즉 가장 큰 값들을 추출하여 새 배열로 반환합니다.