IT/항해99
[항해99_JavaScript 문법 종합반] 2주차 - 1 (구조 분해 할당, 나머지 매개변수 , 일급객체(함수), 배열의 요소로 함수 할당, Map, Set)
쏘매띵
2023. 9. 27. 13:35
구조 분해 할당
말은 거창하지만 그냥 배열이나 객체를 쪼개서 하나하나를 변수에 할당해주는걸 말한다.
//구조분해할당 : destructuring(de + structure + ing)
//배열이나 객체를 쪼개서 할당
//(1) 배열의 경우
let [value1, value2] = [1, "new"];
console.log(value1);
console.log(value2);
let arr = ["value1", "value2", "value2"];
let [a,b,c,d=4] = arr;
console.log(a);
console.log(b);
console.log(c);
console.log(d); //암것도 안넣으면 undefined, 초기값도 넣을 수 있음(d=4)
//(2) 객체인 경우
let user = {
name: 'abc',
age:30
};
let { name, age } = user; //user안에 있는 값을 왼쪽 let {name, age}와 같은 키에 맞는 값들을 저장함.
console.log('name => ',name);
console.log('age => ',age);
//새로운 이름으로 할당 : 값 위치에 변수를 넣어서 할당 가능.
let {name: newName,age: newAge} = user;
console.log(newName);
console.log(newAge);
let {name1, age1, birthday=1231 } = user;
console.log(name1);
console.log(age1);
console.log(birthday);//암것도 안넣으면 undefined, 초기값도 넣을 수 있음 birthday=1231)
나머지 매개변수
매개변수가 몇 개가 들어올지 모를 때 사용.
//단축 속성명 : property shorthand
const name = "nbc";
const age = 30;
//key-value 변수명이 동일하면 생략이 가능.
const obj = { name:name, age: age }//값의 위치에 변수사용가능. 키와 값의 이름이 같을 수 있음. 그럴때 하나만 써주는게 가능함. (name:name을 name만 사용가능. 이걸 단축 속성명이라고 함.) 아래처럼 사용가능.
// const obj = { name, age }
//전개 구문 = spread operator
//destructuring할 때 가장 많이 사용되는 es6 문법 중 하나:
//배열
//기존 배열을 풀어서 새로운 배열을 만들 수 있음.
let arr = [1,2,3];
let newArr = [...arr, 4]
console.log(arr);
console.log(newArr); //[ 1, 2, 3, 4 ]
//객체_객체도 spread operator 사용가능
let user = {
name: 'nbc',
age: 30
}
let user2 = {...user};
console.log(user);
console.log(user2);
//나머지 매개변수 (rest parameter) ...args //매
function exampleFunc (a,b,c,...args) {
console.log(a,b,c);
console.log(...args);
}
exampleFunc(1,2,3,4,5,6,7);
//템플릿 리터럴(Template Literal)
console.log(`Hello World ${3+3}`);
console.log(`
Hello
My name is blabla blablablal~~
`); //멀티라인 쌉가넝~
일급객체(함수)
//일급객체로서의 함수(1)
//(1) 변수에 함수를 할당할 수 있음.
//함수가 마치 값으로 취급된다.
//함수가 나중에 사용될 수 있도록 조치가 됨.
const sayHello = function() {
console.log('Hello');
};
//(2)함수를 인자로 다른 함수에 전달 할 수 있음.
//(2)-1. 콜백함수 : 매개변수로써 쓰이는 함수(고차함수의 한 종류)
//(2)-2. 고차함수 : 함수를 인자로 받거나 return하는 함수
function callFunction(func) {
func();
}
callFunction(sayHello);
//(3) 함수를 반환할 수 있음.
function createAdder(num) {
return function(x) {
return x + num;
}
}
const addFive = createAdder(5);
console.log(addFive(10));
// 일급객체로써의 함수(2)
const person = {
name: "John",
age: 31,
isMarried: true,
sayHello: function() {
console.log(`Hello. My name is ${this.name}`);
// sayHello: () => console.log(`Hello. My name is ${this.name}`)
// 화살표함수는 this를 바인딩하지 않음★★★★★★★★★★★
// 그래서 위의 화살표함수를 리턴하면 this.name 위치에서 undefined가 나옴!
}
}
person.sayHello();
★ 화살표 함수는 this 를 바인딩 하지 않아서 화살표 함수 내에서는 this.변수 를 사용할 수 없다.
배열의 요소로 함수 할당
// 배열의 요소로 함수를 할당
const myArr = [
function(a,b) {
return a + b;
}, function(a, b) {
return a - b;
}
]
console.log(myArr[0](10, 20)); //배열 내 함수요소의 매개변수를 이렇게 전달하면됨.
console.log(myArr[1](10, 20));
function mutiplyBy(num) {
return function(x) {
return x * num
};
};
function add(x,y){
return x+y;
};
const mutiplyByTwo = mutiplyBy(2);
// 위의 코드는 num에 2를 집어넣음으로써 함수를 여러개 만들지않고도 아래와 같이 사용할 수 있음. 재사용성이 올라감.
// const mutiplyByTwo = function(x) { return x * 2 };
const mutiplyByThree = mutiplyBy(3);
// const mutiplyByTwo = function(x) { return x * 3 };
console.log(mutiplyByTwo(3));
console.log(mutiplyByThree(3));
// const mutiplyByTwo = mutiplyBy(2)(3);
// ㄴ위와 같이 매개변수를 넣어서 사용해도 됨!
const result = add(mutiplyByTwo(10), mutiplyByThree(20));
console.log(`Final => ${result}`);
Map
//Map
//JS -> 객체, 배열로 현실 세계를 반영하기 어려움이 있음.
//그리하여 등장한 Map, Set 의 자료구조
//Map, Set의 목적: 기존의 객체 또는 배열보다 데이터의 구성, 검색, 사용을 효율적으로 처리.
//(1) Map
// - key / value
// ㄴkey에 어떤 데이터타입(유형)도 다 들어올 수 있음.
// ㄴMap은 키가 정렬된 순서로 저장되기 때문.
// ㄴ 기능 ( 검색, 삭제, 제거, 여부 확인)
const myMap = new Map();
// set과 get은 칭구칭구
myMap.set('key', 'value'); //값 입력
myMap.get('key'); //값 조회
// ㄴMap은 대량 데이터를 다루는 자료구조. -> 반복하는게 중요함!!!!
// 반복을 위한 메소드 -> keys, values, entries
const myMap = new Map();
myMap.set('one',1);
myMap.set('two',2);
myMap.set('three',3);
console.log(myMap.keys()); // 키만
console.log(myMap.values()); // 값만
console.log(myMap.entries()); // 키-값 모두
for(const key of myMap.keys()){
console.log(key);
}
for(const value of myMap.values()){
console.log(value);
}
for(const entrie of myMap.entries()){
console.log(entrie);
}
console.log(myMap.size); // map의 사이즈(길이)
console.log(myMap.has("two")); // key 기반 검색
Set
//Set (집합이라고 생각해봐)
// ㄴ고유한 값을 저장하는 자료구조
// ㄴ값만 저장.(키를 저장X)
// ㄴ값이 중복되지 않는 유일한 요소로만 구성
// ㄴ 값 추가, 검색, 값 삭제, 모든 값 제거, 존재 여부 확인
const mySet = new Set();
mySet.add('value1');
mySet.add('value2');
mySet.add('value3');
mySet.add('value4');
mySet.add('value5');
mySet.add('value6');
mySet.add('value7');
console.log(mySet.size); // 2 (중복이 허용되지 않은 자료구조.)
console.log(mySet.has("value2"));
//Iterator 반복자
for (const value of mySet.values()){ //Set에서는 value밖에 없으니 vlues() 메소드를 이용해서 값에 접근. (values()괄호 잊지말자.)
console.log(value);
}