더북(TheBook)

혹시 코드를 단순하게 하려고 배열 메서드인 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를 전달했을 때는 배열에 두 가지 항목만 남아있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.