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

JavaScript로 배열의 각 값에서 마지막 n자리만 추출하는 방법

다음과 같은 리터럴 값으로 이루어진 배열이 있다고 가정해 보겠습니다.

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개의 문자를 훨씬 간결하게 추출할 수 있습니다.