slice()
배열을 잘라서! 새로운 배열을 반환해주는 간단한 매서드지만 활용도가 굉장히 높다.
구문
Array.slice(시작인덱스);
Array.slice(시작인덱스, 종료인덱스);
의외로 시작인덱스도 옵셔널이라 그냥 Array.slice() 하면 기존 배열에서 같은 복사된 배열을 반환해준다.
시작 인덱스만 넣으면 자동으로 종료인덱스는 배열의 끝이 된다.
사용예시
const arr = [1,2,3,4,5,6,7,8,9];
arr.slice();
//[1,2,3,4,5,6,7,8,9]
arr.slice(0);
//[1,2,3,4,5,6,7,8,9]
arr.slice(3);
//[4, 5, 6, 7, 8, 9]
arr.slice(3, 5);
//[4, 5]
시작위치에 음수를 넣어주면, 뒤에서 음수만큼 떨어진곳 부터 인덱싱을 시작한다.
const arr = [1,2,3,4,5,6,7,8,9];
arr.slice(-3);
//[7, 8, 9]
배열의 특정 요소 제거
이런 특성을 활용하여 배열의 특정 요소를 제거할 수 있다.
const arr = [1,2,3,4,5,6,7,8,9];
//3을 제거 하고 싶다면..
const targetIdx = arr.indexOf(3);
const frontArr = arr.slice(0, targetIdx);
//[1, 2]
const backArr = arr.slice(targetIdx + 1);
//[4, 5, 6, 7, 8, 9]
//두 배열을 합쳐준다.
frontArr.concat(backArr);
//[1, 2, 4, 5, 6, 7, 8, 9]
//전개 연산자를 사용하면 이렇게도 할 수 있다.
[...frontArr, ...backArr];
//[1, 2, 4, 5, 6, 7, 8, 9]
filter()를 사용해서도 동일하게 특정 idx의 원소를 제거할 수 있다.
const arr = [1,2,3,4,5,6,7,8,9];
//3을 제거 하고 싶다면..
const targetIdx = arr.indexOf(3);
arr.filter((el, idx) => idx !== targetIdx)
//[1, 2, 4, 5, 6, 7, 8, 9]