spread / rest 예제

2023. 1. 3. 14:13코드스테이츠/예제모음

function printMaxNums(...args) { // 전달인자를 모두 args가 받는다.
  console.log(args)
}

printMaxNums(10, 30, 40) // 전달인자 10, 20, 30

function findBiggestArg(...args) { // [10, 30, 40, 20]
  let biggestArg = 0; // 값이 0인 변수 biggestArg 선언
  for (let i = 0; i < args.length; i += 1){ // 배열 args를 돌면서
    if (biggestArg < args[i]){ // 0보다 args의 i번째 인덱스 위치의 값이 크다면,
      biggestArg = args[i] // 그 값을  biggestArg변수에 할당한다.
    }//반복문 한바퀴 10, 두바퀴 30, 세바퀴 40, 네바퀴째에는 biggestArg변수가 20보다 크기때문에 리턴
  }
  return biggestArg
}

let value = findBiggestArg(10, 30, 40, 20)

let arr = [10, 30, 40, 20]
let value = Math.max(arr) // 배열은 전달인자로 사용 할 수 없다.
//NaN

let arr = [10, 30, 40, 20]
let value = Math.max(...arr)//spread는 배열을 풀어서 인자로 사용 가능하게 해준다.
//[10, 30, 40, 20] 중 가장 큰 수인 40을 반환

let arr = ['code', 'states']
let value = [...arr,'pre'...['course', 'student']] //spread는 요소를 펼쳐서 넣어준다.
//['code', 'states','pre','course', 'student']

let fruits = ['apple', 'banana', 'grape'];
let vegetables = ['tomato', 'pumpkin'];

let copiedFruits = [...fruits]; // fruits배열의 복사본 ['apple', 'banana', 'grape'];
copiedFruits.push('pineapple');// ['apple', 'banana', 'grape','pineapple'];

let basket = [...fruits, ...vegetables] // ['apple', 'banana', 'grape','tomato', 'pumpkin'];
//spread는 원본에 영향을 끼치지 않는다.
console.log(basket)

function myFun(a, b, ...manyMoreArgs) {
  console.log(manyMoreArgs);
}

myFun("one", "two", "three", "four", "five", "six");
// a에 "one"이, b에 "two"가 할당되고 나머지 인자들은 manyMoreArgs에 할당된다.

function getAllParamsByArgumentsObj() {
      return arguments;
    }

    const restParams = getAllParamsByRestParameter('first', 'second', 'third');//여기부터
    const argumentsObj = getAllParamsByArgumentsObj('first', 'second', 'third');

    expect(restParams).to.deep.equal(['first', 'second', 'third']);
    expect(Object.keys(argumentsObj)).to.deep.equal(['0','1','2']);
    expect(Object.values(argumentsObj)).to.deep.equal(['first', 'second', 'third']); 

    
    expect(restParams === argumentsObj).to.deep.equal(false);
    expect(typeof restParams).to.deep.equal('object');
    expect(typeof argumentsObj).to.deep.equal('object');
    expect(Array.isArray(restParams)).to.deep.equal(true);
    expect(Array.isArray(argumentsObj)).to.deep.equal(false);

    const argsArr = Array.from(argumentsObj);
    expect(Array.isArray(argsArr)).to.deep.equal(true);
    expect(argsArr).to.deep.equal(['first', 'second', 'third']);
    expect(argsArr === restParams).to.deep.equal(false);
  });

 function getAllParams(required1, required2, ...args) {
      return [required1, required2, args];
    }
    expect(getAllParams(123)).to.deep.equal([123,undefined,[]]);

    function makePizza(dough, name, ...toppings) {
      const order = `You ordered ${name} pizza with ${dough} dough and ${toppings.length} extra toppings!`;
      return order;
    }
    expect(makePizza('original')).to.equal('You ordered undefined pizza with original dough and 0 extra toppings!');
    expect(makePizza('thin', 'pepperoni')).to.equal('You ordered pepperoni pizza with thin dough and 0 extra toppings!');
    expect(makePizza('napoli', 'meat', 'extra cheese', 'onion', 'bacon')).to.equal('You ordered meat pizza with napoli dough and 3 extra toppings!');
  });
});

'코드스테이츠 > 예제모음' 카테고리의 다른 글

Git 설정 및 기본 명령어  (0) 2023.04.12
객체분해 예제  (0) 2023.01.04
스코프 예제  (0) 2023.01.03