[JavaScript] String의 slice vs substring
문자열 문제를 풀 때, 햇갈리는 메서드 두개가 있어 정리해보고자 합니다.
사용법
str.substring(indexStart[, indexEnd 앞])
str.slice(beginIndex[, endIndex 앞])
공통점
- 문자열 원본은 그대로 보존
- 리턴값은 잘라진 문자열
- end 값 생략 가능
- start와 end에 같은 수를 넣을 경우, 빈문자열 리턴
차이점
- start 값이 End 값 보다 클 때, 다른 결과값 (slice: “”, substring: “110W0”)
const str = "He110W0r1d";
console.log(str.substring(7, 2)); // output: "110W0"
console.log(str.slice(7, 2)); // output: ""
- substring: , start값이 End값보다 크다면 작은 숫자가 시작위치, 큰숫자가 종료위치로 셋팅된다. ex. str.substring(7,2) –> str.substring(2,7) 로 자동변경 된다는 의미
- start, end에 음수인 값을 전달할 경우: (slice: “”, substring: “He”)
const str = "He110W0r1d";
console.log(str.substring(-7, 2)); // output: "He"
console.log(str.substring(2, -5)); // output: "He"
console.log(str.slice(-7, 2)); // output: ""
console.log(str.slice(2, -5)); // output: "110"
- substring: start, end 상관없이 한개라도 음수면, 시작위치가 0으로 설정된다.
- slice: end 값이 음수일 때, 뒤에서 부터 세서 그 앞까지 센다.
- slice: start 값이 음수일 때, “”
효율성
- string.slice()의 시간 복잡도: O(1)
- string.substring()의 시간 복잡도: O(1)
결론
- 효율성에 차이가 없고, substring의 경우, 자동변경되는 경우(시작인덱스가 음수일 때, 0번 인덱스부터 셋팅됨 등)가 있어 햇갈릴 수 있어 slice 사용하는 것이 더 좋을 듯합니다.
활용
문자열 my_string과 정수 n이 매개변수로 주어질 때, my_string의 뒤의 n글자로 이루어진 문자열을 return 하는 solution 함수를 작성해 주세요.
- 뒤에서부터 인덱스를 세는 slice 메서드 활용하여 문제 풀이
- 나의 코드
function solution(my_string, n) {
return my_string.slice(-n);
}