[JS] slice, splice 원본수정여부

daun·2022년 5월 29일
0

[오답노트]

목록 보기
6/26

Slice (원본배열수정x)

Array​.prototype​.slice(start, end)

var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 

var arr1 = arr.slice(3, 5);			    // [4, 5]
var arr2 = arr.slice(undefined, 5);		// [1, 2, 3, 4, 5]
var arr3 = arr.slice(-3);		    	// [8, 9, 10]
var arr4 = arr.slice(-3, 9);			// [8, 9]
var arr5 = arr.slice(10);			    // [] 배열길이를 벗어나면 빈배열 반환
var arr6 = arr.slice(4);			    // [5, 6, 7, 8, 9, 10]
var arr7 = arr.slice(undefined);		// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var arr8 = arr.slice(5, -4);			// [6]
var arr9 = arr.slice(2, 15);			// [3, 4, 5, 6, 7, 8, 9, 10]

// slice()는 얉은 복사를 하기 때문에 원본배열 arr에 영향 미치지 않는 배열 
// 메서드에 전달인자가 하나라면 시작점이다.
// 끝점은 포함하지 않는다.

Splice (원본배열수정o)

Array​.prototype​.splice(start, deleteCount, 배열에 추가할 요소)

예제1)
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var arr1 = arr.splice(10, 2, 'a', 'b', 'c'); 

console.log(arr);   
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, "a", "b", "c"]
console.log(arr1); 
// [11, 12]
//  원본배열 : splice 결과에 따라 원본배열이 변경되고,
// splice를 진행한 배열: 원본배열에서 삭제된 요소가 담긴다.
예제2)
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]; 
var arr1 = arr.splice(-6, 4); 

console.log(arr);   // [1, 2, 3, 4, 5, 6, 11, 12]
console.log(arr1);  // [7, 8, 9, 10]
예제3)
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var arr1 = arr.splice(-13, 1);

console.log(arr);   // [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
console.log(arr1);  // [1]
// -13이 배열의 길이를 넘어가므로 0으로 세팅
// arr.splice(0,1) 을 수행해서 원본배열의 1개 요소가 삭제됨

오늘의 결론

왠만하면,
정말 필요한 상황이 아니면,

Slice를 써서 원본배열이 수정되는 것을 방지할 것!

profile
Hello world!

0개의 댓글