Codeit/JavaScript

Rest Parameter

효땡 2024. 8. 9. 09:18

Arguments의 단점

- Arguments 객체가 유사배열이기 때문에 배열의 메소드는 사용불가능

- 항상 함수 호출할 때 전달한 Arguments 전체를 다루기 때문에 특정값을 반환하기 위해서는 따로 indexing 작업이 필요함

function printArguments() {
  for (const arg of arguments) {
    console.log(arg);
  }
};

-> 해결하기 위한 방법

Rest Parameter

- ...args

function printArguments(...args) {
  for (const arg of args) {
    console.log(arg);
  }
};
function printArguments(...args) {
  console.log(args.splice(0, 2)); // ['Young', 'Mark']
  console.log(arguments.splice(0, 2); // TypeError
};

 

- Rest Parameter는 Parameter와 함께 사용 가능

- 일반 Parameter와 함께 사용할 때는 Rest Parameter는 제일 나중에 사용해야 함

function printRank(first, second, ...others) {
  console.log('코드잇 레이스 최종 결과');
  console.log(`우승: ${first}`);
  console.log(`준우승: ${second}`);
  for (const arg of others) {
    console.log(`참가자: ${arg}`);
  }
}

printRank('Phil', 'Won', 'Emma', 'Min', 'Luke');
/*
코드잇 레이스 최종 결과
우승: Phil
준우승: Won
참가자: Emma
참가자: Min
참가자: Luke
*/

 

실습

유튜브나 블로그에서 새로운 전자제품을 리뷰한느 콘텐츠를 보면 우스갯소리로 1세대는 거르는게 답이다.라는 말을 심심찮게 들을 수 있습니다.

그동안 새로운 버전으로 출시되는 제품들은 대부분 잔고장이나 버그들이 많았기 때문인데요.

 

rest parameter를 활용해서 함수를 호출할 때 여러 개의 아규먼트를 전달할 경우 첫 번째 아규먼트는 무시하고 두 번째 아규먼트부터 하나씩 콘솔에 출력하는 ignoreFirst 함수를 완성해주세요.

 

function ignoreFirst(first, second, ... others) {
  console.log(`${second}`);
  for (const arg of others) {
    console.log(`${arg}`);
  }
}

ignoreFirst('1세대', '2세대', '3세대');
ignoreFirst('곰팡이', '강아지', '고양이');
ignoreFirst(20, 9, 18, 19, 30, 34, 40);

 

실습 결과

2세대
3세대
강아지
고양이
9
18
19
30
34
40