[JS] Array.prototype.slice()

hangkemiii·2022년 4월 27일
0

Javascript

목록 보기
4/11
post-thumbnail
post-custom-banner

Array.prototype.slice()

레플릿 풀다가 slice() 메서드 관련 문제가 많이 나오는데 자꾸 이거에 당해서 오늘 부셔버리고 넘어가자 하는 마음으로 블로깅 해보는 시간을 가져보자. 사용 방법은 다음과 같다.

arr.slice([begin[, end]])

정의

slice() 메서드는 어떤 배열의 begin부터 end까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 반환합니다. 즉, 두 매개변수를 통해 추출한 요소를 포함한 새로운 배열을 반환값으로 나타내는 것이다.

여기서 알아두어야 할 것은, slice() 메서드는 원본을 대체하는 것이 아니라, 원본의 배열 요소에서 얕은 복사본을 반환한다는 것이다.

매개변수

slice() 메서드는 두 개의 매개변수를 가진다.

  • begin

0을 시작으로 하는 추출 시작점에 대한 인덱스를 의미한다. 만약 이 매개변수를 설정하지 않는다면, 마찬가지로 0번 인덱스부터 slice()한다. 이 매개변수가 배열의 길이보다 크다면 빈 배열을 반환하고, 음수일 경우에는 배열 끝에서부터의 길이를 나타낸다. slice(-2) 는 배열에서 마지막 두 개의 엘리먼트를 추출해 낸다.

  • end

추출을 종료 할 0 기준 인덱스이다. slice() 메서드는 이 인덱스를 포함하지 않고 이전 인덱스까지만 포함하여 추출한다. 예를 들면, slice(1,4)는 해당 배열의 두번째 요소부터 네번째 요소까지 (1, 2 및 3을 인덱스로 하는 요소)를 추출하게 된다. 이 매개변수가 생략될 경우에는 배열의 길이만큼 추출하게 된다.

예시 문제

sliceCityFromAddress 함수를 구현해 주세요.

  • sliceCityFromAddress 함수는 address 를 인자로 받습니다.

  • address 는 주소를 나타내는 string 입니다.

  • 주어진 주소가 어느 도시 인지를 찾아 해당 주소에서 도시 부분만 삭제한 새로운 주소를 리턴해 주세요.

  • 도시는 무조건 "시" 로 끝납니다. 예를 들어, "서울시".

  • "도" 와 "시" 는 주소에 한번 밖에 포함되어 있지 않습니다.

  • 예를 들어, 다음과 같은 주소가 주어졌다면;

    "경기도 성남시 분당구 중앙공원로 53"

  • 다음과 같은 값이 리턴되어야 합니다:

    "경기도 분당구 중앙공원로 53"

풀이

function sliceCityFromAddress(address) {
  let city = address.indexOf("시");
  let bigCity = address.indexOf("도");

  if (bigCity !== -1 && city !== -1) {
    return address.slice(0, bigCity+1) + address.slice(city+1);
  } else if (bigCity === -1 && city !== -1) {
    return address.slice(city+2);
  }
}

여기서 도와 시를 없애려면, 도와 시가 포함되는 문장까지의 인덱스를 제외하고 추출해야 하기 때문에 end 매개변수에 + 1 씩을 더하여 '도'와 '시'까지 포함되게 한다. 시만 존재할 경우에 + 2를 한 이유는 테스트를 돌려봤더니 띄어쓰기가 있어서 틀렸다고 뜨길래 띄어쓰기까지 제외하여 추출하였기 때문이다. 지금 보니 정말 별거 아닌 문제였잖아..?

profile
Front-End Developer
post-custom-banner

0개의 댓글