멀티 라인 스트링에서, 각 라인 앞쪽에 공통으로 존재하는 공백 스트링을 제거해야 할 때가 있다.
예를 들면
const a = [1, 2, 3];
for(const x in a) {
console.log(x)
}위 텍스트 블럭을 아래처럼 만드는 작업을 할 경우.
const a = [1, 2, 3];
for(const x in a) {
console.log(x)
}구현
Input/Output
a
b
c위 input의 경우 모든 라인의 앞부분 공통 공백은 3개다.
참고로 3번째 라인은 공백만 존재하는 라인이다.
a
b
cCode
const removeCommonLeadingSpaces = (str) => {
const lines = str.split("\n");
const common_spaces = lines
.filter(l => l.trim())
.map(l => l.match(/^ */)[0].length)
.reduce((a, b) => Math.min(a, b), 999);
return lines.map(l => l.slice(common_spaces)).join("\n");
}- 스트링을 라인 배열으로 분리
- filter: 공백 라인제거
- map: 앞쪽 공백 수로 변환
- reduce: 최소값
- 라인 배열 각 라인에서 공백 최소값 제거 후 결합