다음과 같은 리터럴 값으로 이루어진 배열이 있다고 가정해 보겠습니다.
const arr = ["", 20191219, 20191220, 20191221, 20191222, 20191223, 20191224, 20191225];여기서 필요한 것은 이 배열과 숫자 n을 인수로 받아 처리하는 JavaScript 함수입니다. 해당 요소가 n자리 이상이라면 새로운 요소에는 마지막 n자리만 남기고, 그렇지 않다면 원래 값을 그대로 유지해야 합니다.
구현 예제
const arr = ["", 20191219, 20191220, 20191221, 20191222, 20191223, 20191224, 20191225];
const splitElement = (arr, num) => {
return arr.map(el => {
// 문자열 길이가 num 이하면 원본 그대로 반환
if (String(el).length <= num) {
return el;
}
// 뒤에서 num개의 문자만 잘라냄
const part = String(el).substr(String(el).length - num, num);
return +part || part;
});
};
console.log(splitElement(arr, 2));
console.log(splitElement(arr, 1));
console.log(splitElement(arr, 4));코드 설명
함수의 동작 방식을 단계별로 살펴보겠습니다.
- String(el): 배열에는 숫자와 빈 문자열이 섞여 있으므로, 모든 요소를 문자열로 변환한 뒤 길이를 확인합니다.
- substr(): 전체 길이에서 num을 뺀 위치부터 num개의 문자를 잘라내어 마지막 n자리를 얻습니다.
- +part || part: 잘라낸 결과를 숫자로 변환했을 때 유효한 값이면 숫자로, 그렇지 않으면 문자열 그대로 반환합니다.
출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[
'', 19, 20, 21,
22, 23, 24, 25
]
[
'', 9, '0', 1,
2, 3, 4, 5
]
[
'', 1219, 1220,
1221, 1222, 1223,
1224, 1225
]두 번째 결과에서 '0'이 문자열로 표시되는 이유는, 숫자로 변환하면 앞자리 0이 사라져 정보가 손실되기 때문입니다. +part || part 표현식은 숫자 변환 결과가 참(truthy)일 때만 숫자를 사용하고, 그렇지 않으면 원래 문자열을 그대로 유지합니다.
참고: 최신 문법 활용하기
substr()은 현재 폐기(deprecated)된 상태이므로, 최신 코드에서는 음수 인덱스를 지원하는 slice()를 사용하는 것이 좋습니다.
const part = String(el).slice(-num);slice(-num)을 사용하면 문자열 끝에서부터 num개의 문자를 훨씬 간결하게 추출할 수 있습니다.