JavaScript spread와 rest
ES6에서 도입
spread는 특정 객체나 배열 안에 다른 객체나 배열을 퍼트리는 역할
rest는 퍼져있는 것들을 모아오는 역할
둘 다 앞에 ...을 사용한다.
spread
- 객체에서 spread
const slime = {
name: '슬라임'
}
const cuteSlime = {
name: '슬라임',
attribute: 'cute'
}
const purpleCuteSlime = {
name: '슬라임',
attribute: 'cute',
color: 'purple'
}
console.log(slime);
console.log(cuteSlime);
console.log(purpleCuteSlime);
{ name: '슬라임' }
{ name: '슬라임', attribute: 'cute' }
{ name: '슬라임', attribute: 'cute', color: 'purple' }
const slime = {
name: '슬라임'
}
const cuteSlime = {
...slime,
attribute: 'cute'
}
const purpleCuteSlime = {
...cuteSlime,
color: 'purple'
}
const greenCuteSlime = {
...purpleCuteSlime,
color: 'green'
} // 위의 color값을 덮어 쓴다.
console.log(slime);
console.log(cuteSlime);
console.log(purpleCuteSlime);
console.log(greenCuteSlime);
{ name: '슬라임' }
{ name: '슬라임', attribute: 'cute' }
{ name: '슬라임', attribute: 'cute', color: 'purple' }
{ name: '슬라임', attribute: 'cute', color: 'green' }
기존 객체를 복사하고 추가적인 값을 넣어줄 때 사용한다.
const slime = {
name: '슬라임'
}
const cuteSlime = slime;
slime.attribute = 'cute';
const purpleCuteSlime = cuteSlime;
purpleCuteSlime.color = 'purple';
console.log(slime);
console.log(cuteSlime);
console.log(purpleCuteSlime);
console.log(slime === cuteSlime);
{ name: '슬라임', attribute: 'cute', color: 'purple' }
{ name: '슬라임', attribute: 'cute', color: 'purple' }
{ name: '슬라임', attribute: 'cute', color: 'purple' }
true
cuteSlime = slime과 purpleCuteSlime = cuteSlime으로 서로 연결되어 있기 때문에 모두 같은 결과가 나온다.
- 배열에서 사용
const animals = ['개', '고양이', '참새'];
const anotherAnimals = [...animals, '비둘기']; //aniamls.concat('비둘기')와 같다.
console.log(anotherAnimals);
[ '개', '고양이', '참새', '비둘기' ]
const numbers = [1, 2, 3, 4, 5];
const spreadNumbers = [...numbers, 1000, ...numbers];
console.log(spreadNumbers);
[1, 2, 3, 4, 5, 1000, 1, 2, 3, 4, 5]
rest
- 객체에서 rest
const purpleCuteSlime = {
name: '슬라임',
attribute: 'cute',
color: 'purple'
};
const {color, ...rest} = purpleCuteSlime;
console.log(color);
console.log(rest);
// rest안에 {name: '슬라임', attribute: 'cute'} 있음
// rest 이름은 마음대로 변경 가능
const { attribute, ...slime} = rest;
console.log(slime);
purple
{ name: '슬라임', attribute: 'cute' }
{ name: '슬라임' }
- 배열에서 rest
const numbers = [0, 1, 2, 3, 4, 5, 6];
const [one, two, ...rest] = numbers;
// const[...rest, last] = numbers; 배열에서 ...rest는 가장 마지막에 와야 함
console.log(one);
console.log(two);
console.log(rest);
0
1
[ 2, 3, 4, 5, 6 ]
함수에서 rest와 spread
- 함수 파라미터에서 rest
function sum(...rest) {
return rest.reduce((acc, current) => acc + current, 0);
}
console.log(sum(1,2,3,4,5,6,7));
28
기본값 0으로 시작해서 0이 acc가 되고 current에 배열이 들어가져서 순차적으로 acc + current가 실행 된다.
- 함수 인자에서 spread
function subtract(x, y) { //(x, y)는 파라미터, 함수에서 받아오는 값
return x - y;
}
const numbers = [1, 2];
const result = subtract(...numbers) //(...numbers)는 인자, 함수를 사용할 때 넣어주는 값, spread
console.log(result);
-1
function sum(...rest) {
return rest.reduce((acc, current) => acc + current, 0);
}
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
console.log(sum(...numbers));
36
Author And Source
이 문제에 관하여(JavaScript spread와 rest), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lipton/JavaScript-spread와-rest저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)