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

JavaScript 배열에서 가장 작은 숫자 제거하기

JavaScript 배열에서 가장 작은 숫자 제거하기

숫자로 이루어진 배열을 인자로 받아, 배열 안에서 가장 작은 요소를 찾아 제자리(in-place)에서 제거하는 JavaScript 함수를 작성해야 합니다. 여기서 '제자리 제거'란 새로운 배열을 만드는 것이 아니라, 원본 배열 자체를 직접 수정한다는 의미입니다.

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

const arr = [2, 1, 3, 2, 4, 5, 1];
const removeSmallest = arr => {
   const smallestCreds = arr.reduce((acc, val, index) => {
      let { num, ind } = acc;
      if(val >= num){
         return acc;
      };
      ind = index;
      num = val;
      return { ind, num };
   }, {
      num: Infinity,
      ind: -1
   });
   const { ind } = smallestCreds;
   if(ind === -1){
      return;
   };
   arr.splice(ind, 1);
};
removeSmallest(arr);
console.log(arr);

코드 동작 원리

이 함수의 핵심은 reduce() 메서드를 활용하는 것입니다. 배열을 처음부터 끝까지 순회하면서 현재까지 발견된 최솟값(num)과 그 인덱스(ind)를 누적 객체에 저장합니다.

초기값으로 num: Infinityind: -1을 설정하므로, 어떤 숫자가 와도 첫 번째 요소보다 크게 시작됩니다. 각 요소를 비교할 때 현재 값이 저장된 최솟값보다 작으면, 해당 값과 인덱스로 갱신합니다. 순회가 끝나면 가장 작은 숫자의 위치 정보를 얻을 수 있습니다.

만약 빈 배열이 전달되어 인덱스가 그대로 -1이라면 아무 작업도 수행하지 않고 종료하며, 그렇지 않으면 splice(ind, 1)를 호출해 해당 위치의 요소 하나를 원본 배열에서 직접 제거합니다.

위 코드를 실행했을 때 콘솔에 출력되는 결과는 다음과 같습니다 −

[ 2, 3, 2, 4, 5, 1 ]

원본 배열 [2, 1, 3, 2, 4, 5, 1]에서 첫 번째로 등장한 최솟값 1(인덱스 1)이 제거되어, 나머지 요소들이 그대로 유지된 것을 확인할 수 있습니다. 참고로 중복된 최솟값이 여러 개 있을 경우 이 코드는 가장 먼저 발견된 하나만 제거합니다.