[JavaScript] substring과 substr, 그리고 slice와 splice를 정리해보자!

혜린·2022년 3월 7일
1

JavaScript

목록 보기
4/21
post-thumbnail

🤔알고리즘 문제를 풀며 substring()substr()에 차이가 있다는 것을 이제야 알게됐다..(충격) slice()splice()substring()substr()과 달리 배열을 잘라주는 메서드이지만 헷갈렸던 적이 많아 이 김에 정리해놓고자 한다.

🚧 MDNㅣString.prototype.substr()을 통해 substr()은 "바람직하지 않은 특징을 갖고 있으며 사용처가 없어질 경우 명세에서 제거될 것"이라는 것을 알 수 있다. 차이는 알고 있되, substr()의 사용을 지양하자!🚫



1. 문자열

(1) substring()

substring()문자열시작인덱스부터 종료인덱스 전까지의 문자열을 잘라준다.

문자열.substring(시작인덱스[, 종료인덱스])

🎁 예시

function solution(s) {
  let answer;
  let mid = Math.floor(s.length / 2);
  
  if (s.length % 2 === 1) {
     answer = s.substring(mid, mid + 1);
  } else {
     answer = s.substring(mid - 1, mid + 1);
  }
  
  return answer;
}
console.log(solution("study"))

solution 함수 설명
문자열 s의 길이가 홀수일 때는 가운데 글자 1개를,
문자열 s의 길이가 짝수일 때는 가운데의 2글자를 return하는 함수이다.

subtring() 사용

  • "study" 글자의 길이는 5 이므로 홀수에 해당된다.
  • s.substring(mid, mid + 1)mid2부터 mid+13전까지의 문자를 잘라내므로 가운데 글자인 "u"만이 출력된다.

(2) substr()

substr()문자열시작인덱스부터 자를 문자의 길이만큼 문자열을 잘라준다.

문자열.substr(시작인덱스[, 자를 문자의 길이])

🎁 예시

function solution(s) {
  let answer;
  let mid = Math.floor(s.length / 2);
  
  if (s.length % 2 === 1) {
     answer = s.substr(mid, 1);
  } else {
     answer = s.substr(mid - 1, 2);
  }
  
  return answer;
}
console.log(solution("study"))

subtr() 사용

  • subtring()처럼 시작~종료인덱스까지 잘라내는 것이 아니라 시작인덱스부터 원하는 길이만큼 잘라내기 때문에, s.substr(mid, 1)을 보면 mid인 2부터 1개의 글자만을 잘라낸다.


2. 배열

(1) slice()

  • slice()시작인덱스종료인덱스를 지정하면 배열에서 그 만큼을 잘라내준다.
  • 원본 배열은 바뀌지 않는 얕은 복사
배열.slice([시작인덱스[, 종료인덱스]])

(2) splice()

  • splice()시작인덱스에서부터 제거할 요소의 수를 정하면 그 만큼 원본배열에서 제거되며, 원하는 값을 추가할 수도 있다.
  • 원본 배열의 요소를 삭제하거나 추가
배열.splice([시작인덱스[, 제거할 요소의 수[, 추가할 요소]]])

📍 정리

🔪문자열을 자르는 메서드

  • 문자열.substring(시작인덱스, 종료인덱스)
  • 문자열.substr(시작인덱스, 자를 문자의 길이)
    ⭐ECMA-262 표준에 따라, substr() 사용을 자제할 것

    🔪배열을 자르는 메서드
  • 배열.slice([시작인덱스[, 종료인덱스]]) (원본 배열 안바뀜❌)
  • 배열.splice([시작인덱스[, 제거할 요소의 수[, 추가할 요소]]]) (원본 배열 바뀜⭕)


📜 참고

MDNㅣString.prototype.substring()
MDNㅣString.prototype.substr()
MDNㅣArray.prototype.slice()
MDNㅣArray.prototype.splice()

profile
FE Developer

0개의 댓글