spread 연산자(Rest Operator / Spread Operator)
- 배열이나 객체 변수 앞에 점 세 개 붙여서 사용한다.
- 배열 spread 연산자
console.log(. . .[1, 2, 3]);
이렇게 하면 1 2 3 이렇게 출력됨.
#배열을 복사할 때
const arr =[1, 2, 3];
const copy = [...arr];
console.log(copy); ---> [1, 2, 3] (얕은 복사만 함)
#배열의 일부분: slice 이용해서 복사
const arr = [1, 2, 3, 4, 5];
const copy = [...arr.slice(2)];
console.log(copy); ---> [3, 4, 5]
#여러 개의 배열을 하나로 합칠 떄
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [7, 8, 9];
const numbers = [...arr1, ...arr2, ...arr3]
console.log(numbers); ---> [1, 2, 3, 4, 5, 6, 7, 8, 9]
#자료형이 달라도 가능
const chars = [a, b, c]
console.log([...arr1, ...chars]); ---> [1, 2, 3, "a", "b", "c"]
#문자열도 펼쳐짐
const chars = [...'hello'];
console.log(chars); ---> ['h', 'e', 'l', 'l', 'o']
#구명이 있는 배열은 구멍(undefined)도 그대로 출력됨
#함수에 인자를 전달할 때도 사용 가능.
function sum(a, b) {
return a + b;
}
const numbers = [1, 2, 3, 4, 5];
const result = sum(... numbers);
console.log(result); --> 3
console.log(Math.max(...numbers)); --> 배열의 원소 중 최댓값 찾기
-
-
- 객체 spread 연산자
-
#객체 복사
const person = {name: 'lse', age: 10};
const clone = {...person};
console.log(clone)
참조타입은 얕은 복사만 됨.
-->clone에서 값을 변경하면 원본 객체의 참조형에도 반영된다.
#객체 병합
const info = {
address: '서울'
};
const person2 = {
...person,
...info
};
console.log(person2); --> {name: - , age: - , address: - }
※ 동일한 이름의 속성을 가진 객체들을 병합할 때:
마지막에 병합된 객체의 속성으로 overwrite 된다.
#객체에 새로운 속성을 추가할 때
console.log({...person, address: "서울");
#나머지 속성만 출력
const items = {
name: '게임기',
type: '핸드폰',
info: {
price: 10000
}
};
const { name, ...rest } = items;
console.log(rest) ---> {type: "핸드폰", info: Object}
템플릿 리터럴
- 정보를 표현하는 방법이다. ` 이 기호로 감싸서 표현함.
var name = 'k8805';
var letter = `Dear ${name}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Maecenas et auctor tortor, iaculis posuere mi.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices
posuere cubilia curae; Quisque sodales tortor eu neque condimentum,
vel facilisis enim rhoncus.${name}
Integer vel purus eget metus dignissim lacinia ut ut erat.
Duis tempor rutrum tellus, eu egestas dolor blandit ut. ${1+1}
Cras gravida ac elit id dignissim. Maecenas dictum lobortis maximus.
Praesent quis eros turpis. Duis mollis elementum leo ac mattis.${name}`;
console.log(letter);
1) 개행 문자 없어도 ` ` 안에서 줄바꾼 거 반영해서 출력됨
2) ${name}으로 속성값 넣음
3) ${1+1} 계산해서 출력됨
구조분해할당 (destructuring)
- 배열의 구조분해 할당
let fruits = ['apple', 'orange', 'banana'];
let [fr1, fr2, fr3] = fruits;
== let fr1 = fruits[0];
let fr2 = fruits[1];
let fr3 = fruits[2]; 와 같은 말.
--> fr1='apple', fr2='orange', fr3='banan'가 들어간다.
# 만약 넣어야 하는데 배열에 정보가 없으면?
각 요소에 정의되었던 기본값을 사용한다.
let[a=10, b=20, c=50] = [1, 2];
일 때 c는 undefined라서 기본값 50을 사용함. --> [1, 2, 50]
# 공백으로 필요하지 않은 요소 무시하기
let fruits = ['apple', 'orange', 'banana', 'pineapple'];
let [fr1, ,fr2] = fruits;
--> 오렌지, 파인애플은 무시하고 대입함.
# a, b 값을 바꿔치기 하고 싶을 때 임시변수 안 만들어도 됨.
let a =1;
let b = 2;
[a, b] = [b, a];
-
-
- 객체의 구조분해 할당
-
let user = {name: Mike, age: 40};
let {name, age} = user; --> name이 user.name이고 age가 user.age라는 뜻
let {age, name} = user;
--> 배열 구조분해 할당과 달리, 요소들의 순서를 바꿔도 상관 없음.
# 기본값 사용하기
let user = {name: 'Mike', age: 30};
let {name, age, gender = 'male'} = user;
--> 만약 user 객체에 gendef 속성이 있었으면 그 값이 할당되었겠지만
지금은 없어서 기본값 male이 사용됨.
클래스
- 객체: 서로 연관된 변수와 함수를 그루핑해서 이름 붙인 것. (코드를 정리정돈 하는 법)
- 클래스: 객체를 만드는 대표적인 공장으로, es6부터 javascript에 추가된 문법
forEach() / map() / reduce()
- forEach()
- 반복문 역할을 함. for문 대신 쓸 수 있다.
- 배열의 모든 요소들에 대해서 직접 함수를 실행시켜서 for 문보다 간단하다.
# for문 예시 const arr = [1, 2, 3]; const res = []; for (let i = 0; i < array.len; i++) { res.push(arr[i] * 2); } **** # forEach문 예시 arr.forEach(function(value) { res.push(value * 2); }); 출력) 1 2 3 4 5
- map()
- forEach 메서드는 단순히 반복문을 대체하기 위한 함수. --> 새로운 배열 반환 X
- map 메서드는 요소 값을 다른 값으로 mapping하여 원본 배열과 다른 새로운 배열을 생성함.
const res1 = arr.map((value) => { return value * 2; }); const res2 = arr.map((value) => value * 2);
- reduce()
- 배열 안에 있는 모든 요소들을 이용해서 하나의 값으로 만들 때 사용한다. (합계값, 최솟값 같은 것들..)
**예시 1) 배열 요소들의 합계 구하기** const numbers = [1, 2, 3, 4]; ## **for each문:** let total = 0; numbers.forEach((number) => { total = total + number; }); console.log(total); ## **reduce문:** const total = numbers.reduce((accumulator, currentValue) => { return accumulator + currentValue }. 0) **예시 2) 배열에서 가장 작은 값을 가져오기** const numbers - [10, 4, 2, 8]; const smallest = numbers.reduce((accumulator, currentValue) => { if (accumulator > currentValue) { return currentValue; } return accumulator; }); console.log(smallest);
- 기타 배열 메소드
- const arr= [1, 2, 3, 4, 5] arr.push(6, 7); #원소 추가 arr.pop(); #마지막 원소 꺼내서 삭제 arr.unshift(10, 20, 30); #배열의 가장 앞에 원소 추가 arr.shift(); #배열의 가장 앞의 원소를 꺼내서 삭제