Array.prototype.splice vs Array.prototype.slice

4020 단어 splicearrayarray

splice

배열은 참 많은 메소드를 제공해준다. 그중에 splice 의 특징에 대해서 알아보자.

원본 배열 직접수정

말 그대로다. 원본 배열에 호작질을 한다.

원본 배열에서 빠지는 값을 리턴한다

명확하게 나와있다. 인자로 3개를 받는데
첫번째 인자는 원본 배열의 시작 인덱스
두번째 인자는 첫번째 인자로 지정한 인덱스부터 몇개 날릴 것인지 (0 이면 아무것도 안날림, 그러면 리턴되는 것이 없음)
세번째 인자는 추가할 요소, 여기에 값이 없으면 추가는 없고 원본 배열에서 원하는 만큼 삭제만 한다. (그래서 배열에서 값을 뽑을 때 splice 를 쓰는 듯..)

slice

splice랑 비슷한 듯 다르다.

원본 배열 터치 없음

원본 배열을 건들이지 않는다. (splice와 차이점)

원본 배열에서 원하는 만큼 빼낸다

첫번째 인자는 원본 배열에서 시작하는 인덱스
두번째 인자는 splice 와 같은 듯 다른 듯 싶다. splice는 첫번째 인자의 인덱스부터 카운트였는데 여기는 종료하는 인덱스를 적는다. 종료하는 인덱스에 해당되는 값은 빠지지 않는다. 이게 0부터 양수일 때는 splice 와 리턴되는 값이 같은데 음수일 경우 얘기가 다르다.

const a = [1, 2, 3, 4, 5];
const b = [1, 2, 3, 4, 5];

const c = a.splice(0, 2);
const d = b.slice(0, 2);

console.log("a:: ", a);
console.log("b:: ", b);
console.log("c:: ", c);
console.log("d:: ", d);

이런 게 있다고 할 때, splice 를 한 c의 결과와 slice 를 한 d 의 값이 같다. 틀려지는 건 원본 배열 밖에 없다. 하지만 음수일 때는 다르다. 그래서 같은 듯 다르다라고 얘기했다. 생략할 경우 원본 배열의 length 가 들어간다. 음수일 경우 결과가 다른 이유는 splice 의 경우는 아무것도 내놓지 않는데(원본 배열도 변화 없음) slice 의 경우는 원본 배열의 끝에서부터 카운트를 한다.

좋은 웹페이지 즐겨찾기