[js] slice() vs splice()

tofu·2023년 11월 13일

javascript

목록 보기
3/5

코테를 풀다보면 splice , slice 관련 개념이 자주 나온다.
헷갈리면 안되는데 자꾸 헷갈려서 따로 정리를 해둬야겠다 싶었다!

Slice 함수

slice() 함수는 배열로 부터 특정 범위를 복사한 값들을 담고 있는 새로운 배열을 만드는데 사용한다.

 numbers = [0,1,2,3,4,5]
 numbers.slice(2,4)

첫번째 인자로 시작 인덱스(index), 두번째 인자로 종료 인덱스를 반환
위 예시를 보면 2번째 인덱스부터 4번째까지를 반환하는데 이때 종료 인덱스번째는 제외하고 2,3번째만 출력한다!
따라서 [2,3] 만 출력 !!

Splice 함수

배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경한다ㄷ.

numbers = [1,2,3,4,5]
const arr= numbers.splice(2,3,'a','b')

2번째 인덱스부터 4개의 요소를 삭제하고 'a','b'를 추가한다.
그럼 numbers에는 [1,2,a,b]가 저장되고
arr에는 삭제된 요소인 [3,4,5]가 들어있다.

프로그래머스 문자열 겹쳐쓰기에 대한 문제에서도 이 개념이 쓰인다.

<문제>

문자열 my_string, overwrite_string과 정수 s가 주어집니다. 문자열 my_string의 인덱스 s부터 overwrite_string의 길이만큼을 문자열 overwrite_string으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

예시
"He11oWor1d" "lloWorl" 2 "HelloWorld"
"Program29b8UYP" "merS123" 7 "ProgrammerS123"

해결

우선 !
1. my_string에서 s 인덱스부터 overwrite_string 길이 만큼을 제거해줘야 겠지?
ex) He11oWor1d인 경우 2번째 인덱스부터 'lloWorl'의 길이인 7만큼을 제거하면 'H', 'e'만 남는다.

  1. 문자열을 배열로 바꿔야 제거하는 함수를 써서 overwrite_string을 마저 뒤에 붙일 수 있을 것 같다.
    이때 splice함수를 써서 7만큼 삭제하고 추가하고 싶은 문자열을 넣어야지.
  2. 그다음 다시 배열을 문자열로 바꿔줘야함.
> const str=[...my_string] //배열로 바꾸기

str.splice(s,overwrite_string.length,overwrite_string);
// s번째 인덱스부터 overwrite_string 길이 만큼을 제거하고 또 overwrite_string을 그자리에 추가.

str.join(''); //배열을 문자열로 바꾸기

profile
치열해지자

0개의 댓글