[JavaScript Algorithm] splice() vs slice() - DAY 2

Dia Lee·2023년 1월 3일
0

Algorithm

목록 보기
4/7
post-thumbnail

✅ splice()

배열의 기존 요소를 삭제 또는 교체하거나 새 요소를 추가하여 배열의 내용을 변경하는 메서드

array.splice(start[, deleteCount[, item1[, item2[, ...]]]])

start

배열의 변경을 시작할 인덱스

배열의 길이보다 큰 값이라면
🧐 start > array.length ?
실제 시작 인덱스는 배열의 길이로 설정

🧐 start < 0 ?
배열의 끝에서부터 요소 count
ex) array.splice(-n) === array[array.length - n].

🧐 |start| > array.length ?
0으로 설정

deleteCount (Optional)

배열에서 제거할 요소의 개수

🧐 deleteCount > array.length - start or deleteCount 생략 ?
start부터의 모든 요소를 제거

🧐 deleteCount < 0 ?
어떤 요소도 제거하지 않지만 최소 하나의 새로운 요소 지정 필수!

item1, item2, <em>...</em> (Optional)

배열에 추가할 요소
아무 요소도 지정하지 않으면 splice()는 요소 제거만 수행!

Return

제거한 요소를 담은 배열을 return!
단, 하나의 요소만 제거한 경우 길이가 1인 배열을 return하고 아무 값도 제거하지 않았으면 빈 배열을 return

코드

const months = ['Jan', 'March', 'April', 'June'];

months.splice(1, 0, 'Feb');
// months[1]자리부터 0개를 삭제하고 'Feb'를 추가!
console.log(months); // ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// months[4]자리부터 1개를 삭제하고 ' May'를 추가!
console.log(months); // ["Jan", "Feb", "March", "April", "May"]

✅ slice()

어떤 배열의 begin 부터 end 까지(end 미포함)에 대한 얕은 복사본을 새로운 배열 객체로 return!
단, 원본 배열은 immutable

array.slice([begin[, end]])

begin (Optional)

0을 시작으로 하는 추출 시작점에 대한 인덱스

🧐 begin < 0?
배열의 끝에서부터의 길이
ex) slice(-2) 는 배열에서 마지막 두 개의 요소 추출

🧐 begin === undefined ?
0번 인덱스부터 slice!

🧐 begin > array.length ?
빈 배열 return

end (Optional)

추출을 종료 할 0 기준 인덱스로 end 인덱스를 제외하고 추출
ex) slice(1,4)는 인덱스 값이 1,2,3 인 요소를 추출

🧐end < 0 ? 배열의 끝에서부터의 길이를 나타냅니다.
ex)slice(2,-1) 는 세번째부터 끝에서 두번째 요소까지 추출

🧐end 생략?
slice()는 배열의 끝까지(arr.length) 추출

🧐만약 end > array.length ?
배열의 끝까지(array.length) 추출

Return

추출한 요소를 포함한 새로운 배열을 return!

코드

let fruits = ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'];

let citrus = fruits.slice(1, 3);

console.log("fruits : "+fruits);
// fruits : ['Banana', 'Orange', 'Lemon', 'Apple', 'Mango'] => 원 배열 불변!

console.log("citrus : "+citrus);
// citrus : ['Orange','Lemon']

❓응용문제 (배열 자르기)

코딩테스트 연습 - 배열 자르기

문제 설명

정수 배열 numbers와 정수 num1num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.


제한사항

  • 2 ≤ numbers의 길이 ≤ 30
  • 0 ≤ numbers의 원소 ≤ 1,000
  • 0 ≤num1 < num2 < numbers의 길이

입출력 예

numbersnum1num2result
[1, 2, 3, 4, 5]13[2, 3, 4]
[1, 3, 5]12[3, 5]

입출력 예 #1

  • [1, 2, 3, 4, 5]의 1번째 인덱스 2부터 3번째 인덱스 4 까지 자른 [2, 3, 4]를 return 합니다.

입출력 예 #2

  • [1, 3, 5]의 1번째 인덱스 3부터 2번째 인덱스 5까지 자른 [3, 5]를 return 합니다.
//풀이 1
const solution=(numbers, num1, num2)=>numbers.slice(num1,num2+1)

//풀이 2
const solution=(numbers, num1, num2)=>numbers.splice(num1, num2-num1+1);

📍 Reference

Array.prototype.splice() - JavaScript | MDN

Array.prototype.slice() - JavaScript | MDN

0개의 댓글