다음과 같은 숫자 리터럴 배열이 있다고 가정해 보겠습니다.
const arr = [56768, 5465, 5467, 3, 878, 878, 34435, 78799];
여기서 우리는 이 배열과 숫자 n을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 각 요소의 자릿수가 n 이상이면 마지막 n자리만 남기고, n 미만이라면 해당 요소를 그대로 반환해야 합니다.
예를 들어 n = 2라고 하면, 위 배열에 대한 출력 결과는 다음과 같습니다.
const output = [68, 65, 67, 3, 78, 78, 35, 99];
구현 예제
다음은 이 문제를 해결하는 전체 코드입니다.
const arr = [56768, 5465, 5467, 3, 878, 878, 34435, 78799];
const splitLast = (arr, num) => {
return arr.map(el => {
if(String(el).length <= num){
return el;
};
const part = String(el).substr(String(el).length - num, num);
return +part || part;
});
};
console.log(splitLast(arr, 2));
코드 설명
이 코드의 동작 원리를 단계별로 살펴보겠습니다.
- map() 메서드: 배열의 모든 요소를 순회하면서 각 요소를 변환한 새로운 배열을 반환합니다. 원본 배열은 변경되지 않습니다.
- String(el): 숫자를 문자열로 변환하여 length 속성으로 자릿수를 확인할 수 있게 합니다.
- 자릿수 검사: 요소의 길이가 num보다 작거나 같으면 변환 없이 원래 값을 그대로 반환합니다.
- substr(): 문자열 끝에서 num개의 문자를 추출합니다. 시작 인덱스는 (문자열 길이 − num)입니다.
- +part || part: 추출한 문자열을 숫자로 변환하되, 변환 결과가 0처럼 falsy한 값이면 원본 문자열을 그대로 유지합니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[
68, 65, 67, 3,
78, 78, 35, 99
]
참고: 최신 JavaScript 환경에서는 substr() 대신 slice() 메서드를 사용하는 것이 권장됩니다. String(el).slice(-num)을 사용하면 음수 인덱스로 뒤에서부터 문자를 잘라내므로 더 간결하게 동일한 결과를 얻을 수 있습니다.