🤔알고리즘 문제를 풀며
substring()
과substr()
에 차이가 있다는 것을 이제야 알게됐다..(충격)slice()
와splice()
는substring()
과substr()
과 달리 배열을 잘라주는 메서드이지만 헷갈렸던 적이 많아 이 김에 정리해놓고자 한다.
🚧 MDNㅣString.prototype.substr()을 통해substr()
은 "바람직하지 않은 특징을 갖고 있으며 사용처가 없어질 경우 명세에서 제거될 것"이라는 것을 알 수 있다. 차이는 알고 있되,substr()
의 사용을 지양하자!🚫
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)
는mid
인2
부터mid+1
인3
전까지의 문자를 잘라내므로 가운데 글자인 "u"만이 출력된다.
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개의 글자만을 잘라낸다.
slice()
slice()
는 시작인덱스와 종료인덱스를 지정하면 배열에서 그 만큼을 잘라내준다.- 원본 배열은 바뀌지 않는 얕은 복사
배열.slice([시작인덱스[, 종료인덱스]])
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()