<목차>
1. 템플릿 리터럴(Template Literal)
2020/10/07 - [개발/자바스크립트] - [자바스크립트] JS다운 코드 스타일 #1. 템플릿 리터럴
2. spread 연산자
3. 배열, 함수형 프로그래밍
2020/10/15 - [개발/자바스크립트] - [자바스크립트]JS다운 코드 스타일 #3. 배열, 함수형 프로그래밍
4. 비구조화 할당
2020/11/20 - [개발/자바스크립트] - [자바스크립트]JS다운 코드 스타일 #4. 비구조화 할당
2. spread 연산자
spread 는 ES6에 추가된 연산자입니다. 펼침연산자라고 한다.
배열, 문자열 등의 이터러블을 분해하여 개별요소로 만드는 기능을 제공합니다.
Syntax (사용법)
const arr = ['a', 'b', 'c']
console.log(arr) // ['a', 'b', 'c']
console.log(...arr) // 'a' 'b' 'c'
//배열 병합
const arr2 = [1, 2, 3]
console.log([...arr, ...arr2]) // ['a', 'b', 'c', 1, 2, 3]
// 배열 복사
const clonedArr = [...arr]
console.log(clonedArr) // ['a', 'b', 'c']
배열 병합 및 추가
const arr = ['a', 'b', 'c']
const arr2 = [1, 2, 3]
arr.push('d');
arr.push('e');
▼
arr2 = [...arr2,'4','5'];
arr2 = ['4',...arr2,'5'];
arr2 = ['4','5',...arr2];
코드처럼 push를 써서 하나씩 밀어넣지 않고 배열의 구조를 가져와 추가하는 느낌으로 가능하다.
또한 3개의 예시처럼 어느 위치로도 배열 값을 추가할 수 있다.
const arr = ['a', 'b', 'c']
const arr2 = [1, 2, 3]
const beforeArr = arr.concat(arr2); // ['a','b','c',1,2,3]
▼
const AfterArr = [...arr, ...arr2]; // ['a','b','c',1,2,3]
spread 연산자를 쓰면 concat연산자를 대체가능하다. concat를 쓰면 한 배열에 다른 배열을 추가하는 느낌이라면 spread를 쓰면 동등한 두 배열을 합치는 느낌을 줘서 더 직관적이다.
배열, 객체 복사
// 객체의 값을 복사하는 경우
let obj = {
a: 10,
b: 20
};
let newObj = {
a: obj.a,
b: obj.b
};
console.log(newObj); // {a: 10, b: 20}
// 배열의 값을 복사하는 경우
let arr = [1,2,3];
let newArr = [arr[0], arr[1], arr[2]]; // [1, 2, 3]
▼
let afterObj = {...obj};
let afterArr = [...arr];
기존의 객체,배열을 복사하는 방법이었다. arr[0]등의 요소에 직접 달라붙어서 하나씩 해야하는 귀찮음이 있었는데 spread 연산자를 쓰게 되면 아주 간단히 깊은 복사가 가능하다.
let arr = [1,2,3];
let afterArr = [...arr];
console.log(arr===afterArr) // false
하지만 코드로 보듯이 둘은 같지 않습니다.(같은 참조가 아님).
값 넘기기
function sum(a,b,c) {
return a+b+c;
}
let arr = [100,200,300];
sum(arr[0],arr[1],arr[2]); // 600
sum.apply(null, arr); // 600
sum(...arr); // 600
파라미터를 받아서 합계를 주는 sum 함수가 있다.
처음에는 배열의 인덱스로 각각 접근해서 값을 넘겨주는 방식었고,
그다음에는 apply를 이용한 방법,
마지막으로는 spread 를 이용한 방법입니다. 딱 봐도 간단하다.
'개발 > 자바스크립트' 카테고리의 다른 글
[자바스크립트] scope chain 과 variable shadowing에 대해 (0) | 2020.11.11 |
---|---|
[자바스크립트]JS다운 코드 스타일 #3. 배열, 함수형 프로그래밍 (0) | 2020.10.15 |
[자바스크립트] JS다운 코드 스타일 #1. 템플릿 리터럴 (0) | 2020.10.07 |
[자바스크립트] 배열 비교하는 3가지 방법 + 형님의 솔루션 (0) | 2020.09.27 |
[자바스크립트] var, let, const 에 대하여 (0) | 2020.09.27 |
댓글