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

JavaScript 배열에서 선행 0(앞자리 0) 제거하는 방법

배열 앞부분에 위치한 0(선행 0)만 제거하고 싶다면 filter() 메서드를 활용하면 됩니다. filter()는 주어진 조건을 통과한 요소들만 모아 새로운 배열을 반환하는 자바스크립트 배열 메서드로, 이 문제에서 핵심적인 역할을 합니다.

적용 대상 입력 배열

아래와 같은 입력 배열에서 맨 앞에 연속된 0만 제거하고, 그 뒤에 등장하는 0은 그대로 유지해 보겠습니다.

[10, 0, 12, 0, 0]
[0, 0, 0, 0, 0, 0, 10, 12, 0]
[12, 0, 0, 1, 0, 0]

예제 코드

const removeLeadingZero = input =>
input.filter((lastValue => value => lastValue = lastValue || value)(false)
);

console.log(removeLeadingZero([10, 0, 12, 0, 0]));
console.log(removeLeadingZero([0, 0, 0, 0, 0, 0, 10, 12, 0]));
console.log(removeLeadingZero([12, 0, 0, 1, 0, 0]));

동작 원리

이 코드의 핵심은 클로저(closure)입니다. 즉시 실행 함수가 false로 초기화된 변수 lastValue를 캡처하고, 내부 함수가 각 요소(value)를 순회하며 lastValue = lastValue || value 연산을 수행합니다.

  • 처음에는 lastValuefalse(falsy)이므로, 배열 앞쪽의 0들은 계속 falsy 상태로 유지되어 필터링되어 제거됩니다.
  • 0이 아닌 값이 처음 등장하는 순간 lastValue가 truthy 값으로 바뀌고, 이후에는 어떤 값이 와도 truthy를 유지하기 때문에 나머지 요소(중간에 있는 0 포함)는 모두 보존됩니다.

덕분에 별도의 인덱스 계산 없이도 '선행 0만 제거'하는 동작을 한 줄의 filter 체인으로 구현할 수 있습니다.

프로그램 실행 방법

위 프로그램을 실행하려면 Node.js 환경에서 다음 명령어를 사용합니다.

node fileName.js

여기서는 파일 이름이 demo76.js이므로 아래와 같이 실행합니다.

node demo76.js

실행 결과

프로그램을 실행하면 다음과 같은 출력을 확인할 수 있습니다.

PS C:\Users\Amit\JavaScript-code> node demo76.js
[ 10, 0, 12, 0, 0 ]
[ 10, 12, 0 ]
[ 12, 0, 0, 1, 0, 0 ]

첫 번째 배열은 앞에 0이 없어 그대로 출력되고, 두 번째 배열은 여섯 개의 선행 0이 모두 제거된 것을 확인할 수 있습니다. 세 번째 배열 역시 맨 앞의 0이 제거되고 중간의 0은 그대로 남습니다.