배열과 숫자 n을 인수로 받아, 배열에서 모든 n번째 요소를 제자리(in-place)에서 제거하는 함수 removeNth를 작성해야 한다고 가정해 보겠습니다.
이런 작업은 자바스크립트의 Array.prototype.splice() 메서드를 활용하면 간단하게 처리할 수 있습니다. 핵심은 반복문의 시작 인덱스와 증가 폭을 어떻게 설정하느냐에 있습니다.
예제 코드
const arr = ['T','h','a','i','s','b',' ','i','c','s',' ','a','t','h','e','e',' ','t','s','o','r','n','g','t',' ','t','n','h','a','s','t',' ','o','n','e','o','v','e','a','r',' ','f','e','n','a','d','s','p',','];
const removeNth = (arr, n) => {
for(let i = n-1; i < arr.length; i += n){
arr.splice(i, 1);
};
};
removeNth(arr, 2);
console.log(arr);
코드 동작 원리
splice(i, 1)은 인덱스 i 위치의 요소 하나를 삭제합니다. 요소가 제거될 때마다 배열의 길이가 1씩 줄어들고 뒤쪽 요소들이 앞으로 한 칸씩 이동하기 때문에, 인덱스를 n씩 증가시키면 정확히 n번째 위치에 있는 요소들을 순서대로 제거할 수 있습니다. 위 예제에서는 n이 2이므로 배열의 짝수 번째(인덱스 1, 3, 5...) 요소들이 차례로 삭제됩니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
[
'T', 'a', 'i', 'b', ' ', 'c',
's', 'a', 't', 'e', 'e', 't',
's', 'r', 'n', 't', ' ', 'n',
'h', 's', 't', 'o', 'n', 'o',
'v', 'a', 'r', 'f', 'e', 'a',
'd', 'p', ','
]