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

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