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

JavaScript로 배열에서 가장 작은 n개의 숫자를 원래 순서 그대로 추출하기

문제

숫자로 이루어진 배열 arr과 숫자 n을 인자로 받는 JavaScript 함수를 작성해야 합니다.

이 함수는 배열 arr에서 가장 작은 n개의 숫자를 추출하되, 원래의 상대적 순서는 그대로 유지해야 합니다. 즉, 오름차순이나 내림차순으로 새롭게 정렬하는 것이 아니라, 원본 배열에서의 등장 순서를 그대로 따라야 한다는 의미입니다.

예제 코드

다음은 해당 기능을 구현한 코드입니다 −

const arr = [6, 3, 4, 1, 2];
const num = 3;
const smallestInOrder = (arr = [], num) => {
   if(arr.length < num){
      return arr;
   };
   const copy = arr.slice();
   copy.sort((a, b) => a - b);
   const required = copy.splice(0, num);
   required.sort((a, b) => {
      return arr.indexOf(a) - arr.indexOf(b);
   });
   return required;
};
console.log(smallestInOrder(arr, num));

출력 결과

콘솔 출력 결과는 다음과 같습니다 −

[3, 1, 2]

동작 방식 설명

위 코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.

  • 먼저 slice() 메서드로 원본 배열의 복사본을 만든 뒤, 오름차순으로 정렬합니다.
  • splice(0, num)을 사용해 정렬된 복사본에서 가장 작은 n개의 요소를 추출합니다.
  • 추출된 요소들을 indexOf()를 활용해 원본 배열에서의 인덱스 순서대로 다시 정렬함으로써, 원래의 상대적 순서를 복원합니다.

예제에서 배열 [6, 3, 4, 1, 2] 중 가장 작은 세 수는 1, 2, 3입니다. 이 값들이 원본 배열에서 등장한 위치 순서대로 나열하면 [3, 1, 2]가 되므로, 최종 결과 역시 동일하게 출력됩니다.