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

JavaScript 배열의 특정 구간만 정렬하는 방법

문제 소개

JavaScript에서 배열 전체가 아닌 특정 인덱스 범위에 해당하는 부분만 정렬해야 하는 경우가 있습니다. 이번 글에서는 문자열 배열과 시작 인덱스, 끝 인덱스를 인수로 받아, 지정된 범위 안의 요소만 정렬하고 나머지 요소는 그대로 유지하는 함수를 작성해 보겠습니다.

요구 사항

작성할 함수는 다음 세 가지 인수를 받습니다.

  • 첫 번째 인수: 문자열 배열
  • 두 번째 인수: 정렬을 시작할 인덱스(start)
  • 세 번째 인수: 정렬을 끝낼 인덱스(end)

start와 end 사이에 있는 요소들만 정렬하고, 그 외의 요소들은 원래 위치와 순서를 그대로 유지해야 합니다.

예시

const arr = ['z', 'b', 'a'];
sortBetween(arr, 0, 1);

위 코드는 0번 인덱스와 1번 인덱스의 요소만 정렬해야 하며, 기대하는 결과는 다음과 같습니다.

const output = ['b', 'z', 'a'];

구현 방법

splice() 메서드를 활용하면 간단하게 해결할 수 있습니다. 먼저 정렬할 부분을 배열에서 잘라내고, 그 부분만 정렬한 뒤 원래 자리에 다시 삽입하는 방식입니다.

const arr = ['z', 'b', 'a'];
const sortBetween = (arr = [], start, end) => {
   const part = arr.splice(start, end - start + 1);
   part.sort();
   arr.splice(start, 0, ...part);
}
sortBetween(arr, 0, 1);
console.log(arr);

코드 설명

  1. arr.splice(start, end - start + 1): start 인덱스부터 end 인덱스까지의 요소를 잘라내어 새로운 배열 part에 저장합니다. 잘라낼 개수가 end - start + 1인 이유는 양 끝 인덱스를 모두 포함해야 하기 때문입니다.
  2. part.sort(): 잘라낸 부분 배열만 정렬합니다.
  3. arr.splice(start, 0, ...part): 정렬된 요소들을 원래 시작 위치에 다시 삽입합니다. 삭제 개수를 0으로 지정했기 때문에 기존 요소는 제거되지 않고 그대로 유지됩니다.

실행 결과

콘솔에는 다음과 같은 결과가 출력됩니다.

[ 'b', 'z', 'a' ]

0번과 1번 인덱스의 요소('z'와 'b')만 정렬되어 'b', 'z' 순서로 바뀌었고, 2번 인덱스의 'a'는 그대로 유지된 것을 확인할 수 있습니다. 이처럼 splice()sort()를 조합하면 배열의 일부 구간만 손쉽게 정렬할 수 있습니다.