혹시 코드를 단순하게 하려고 배열 메서드인 splice()
를 사용할지도 모르겠습니다. 이 메서드로 배열에서 항목을 제거할 수 있는데, 바로 우리가 찾던 기능입니다! 위의 함수를 리팩토링을 거쳐 다음과 같이 단순한 함수로 수정합니다.
arrays/spread/splice.js
function removeItem(items, removable) { const index = items.indexOf(removable); items.splice(index, 1); return items; }
그렇지만 문제는 splice()
메서드가 원본 배열을 조작한다는 점입니다. 다음 코드에 문제가 있는지 살펴보세요.
arrays/spread/splice.js
const books = ['practical vim', 'moby dick', 'the dark tower']; const recent = removeItem(books, 'moby dick'); const novels = removeItem(books, 'practical vim');
배열 novels
에는 어떤 값이 포함되어 있을까요?
배열 novels
에는 'the dark tower'
만 포함되어 있습니다. 처음 removeItem()
을 호출할 때 배열 books
를 전달하고 'moby dick'
을 제거한 배열을 반환받습니다. 그렇지만 이 과정에서 배열 books
도 변경되었습니다. 다음 함수에 배열 books
를 전달했을 때는 배열에 두 가지 항목만 남아있습니다.