//구조 분해 할당
let arr = [1,2,3];
let [one, two, three] = arr; //배열 arr의 값을 순서대로 변수 one, two, three에 할당함.
console.log(one, two, three);
let person = {
name: "이정환",
age : 25,
location : "경기도"
};
let {name, age, location} = person;
console.log(name, age, location);
//함수 func에서는 전달된 객체에서 프로퍼티의 value를 매개변수 name, age, location에 각각 구조 분해 할당한다.
function func({ name, age, location }) {
console.log(name, age, location);
}
let person = {
name : "이정환",
age : 25,
location : "경기도"
};
func(person); //객체를 인수로 전달
function func({name : n, age : a, location :l}) {
console.log(n, a, l); // 프로퍼티 이름 변
}
let person = {
name : "이정환",
age : 25,
location : "경기도"
};
func(person); //객체를 인수로 전달
배열에서의 스프레드 연산자
//스프레드 연산자와 배열 객체
let arrA = [1,2,3];
let arrB = [...arrA, 4,5,6]; //변수 arrB는 첫 번째 요소에 또 다른 배열 ...arrA를 저장한다.
//arrB에는 arrA 요소의 1,2,3 + 뒤에 4,5,6이 할당된다.
console.log(arrB);
function func(a, b, c) {
console.log(a, b, c) //2. 인수 3개의 값 1,2,3을 전달하여 매개변수 a,b,c -> 1,2,3으로 저장된다.(순서대로 저장됨)
}
let arr = [1, 2, 3];
func(...arr); // 1. 변수 arr에 저장된 배열을 개별 요소로 분리한다.
function func(...rest) { // rest 매개변수가 된다.
console.log(rest);
}
func(1, 2, 3, 4) // 인수들이 순차적으로 rest배열에 저장된다.
// rest = [1,2,3,4]
function func(param, ...rest) {
console.log(param); //parame에는 첫 번째 인수 1이 저장됨.
console.log(rest); // rest 배열에는 나머지 인수들이 순차적으로 저장됨.
}
func(1, 2 ,3 ,4);
function func(...rest, param) { **// rest 매개변수는 마지막에 작성해야한다!**
console.log(param);
console.log(rest);
}
func(1, 2, 3, 4);
let food = ["짜장면", "피자", "치킨"];
const newLength = food.push("탕수육", "라자냐"); //요소 추가
console.log(food);
condole.log(`새로운 배열의 길이 : ${newLength}`);
----------------------------------------------------------
["짜장면", "피자", "치킨", "탕수육", "라자냐"]
새로운 배열의 길이 : 5
let food = ["짜장면", "피자", "치킨"];
const removedItem = food.pop();
console.log(removedItem); //제거 된 것
console.log(food); //제거되고 남은 것
-----------------------------------------------------------
"치킨"
["짜장면", "피자"]
let food = ["짜장면", "피자", "치킨"];
const removedItem = food.shift();
console.log(removedITem);
console.log(food);
----------------------------------------------------------
"짜장면"
["피자", "치킨"]
let food = ["짜장면", "피자", "치킨"];
const newLength = food.unshift("갈비찜");
console.log(food);
console.log(`새로운 배열의 길이 : ${newLength}`);
----------------------------------------------------------
["갈비찜", "짜장면", "피자", "치킨"];
새로운 배열의 길이 : 4
const arr = [1,2,3];
const sliced = arr.slice(0,2); //0~1 인덱스 뽑기
console.log(arr);
console.log(sliced);
------------------------------------------------------------
[1,2,3]
[1,2]
const sliced = arr.slice(2); //2번째 인덱스 하나만 추출
------------------------------------------------------------
[3]
const arr = [1,2,3,4,5];
console.log(arr.slice(-1));
console.log(arr.slice(-2));
console.log(arr.slice(-3));
console.log(arr.slice(-4));
console.log(arr.slice(-5));
-----------------------------------------------------------
[5]
[4,5]
[3,4,5]
[2,3,4,5]
[1,2,3,4,5]
let arA = [1,2];
let arB = [3,4];
let arrC = arrA.concat(arrB);
console.log(arrC);
console.log(arrA);
------------------------------------------------------------
[1,2,3,4]
[1,2]
let arA = [1,2];
let arB = { a: 1, b:2 },
let arrC = arrA.concat(arrB);
console.log(arrC);
------------------------------------------------------------
[1, 2, { a:1, b:2 }]
fuction cb(item, idx) {
console.log(`${id}번째 요소: ${item}`);
}
const arr = [1,2,3];
arr.forEach(cb)
------------------------------------------------------------
const arr = [1,2,3];
arr.forEach((item, idx) => {
console.log(`${idx}번째 요소 : ${item}`);
});
------------------------------------------------------------
0번째 요소: 1
1번째 요소: 2
2번째 요소: 3
let arr = [1,3,5,7,1];
console.log(arr.indexOf(1,0)); // 인덱스 1을 찾고, 0부터 탐색해라.
-------------------------------------------------------------
0 // 0번째 인덱스의 값이 1
==============================================================
console.log(arr.indexOf(1));
console.log(arr.indexOf(1, -1));
------------------------------------------------------------
0
4
let arr = [1,3,5,7,1];
console.log(arr.includes(3));
console.log(arr.includes("생신"));
----------------------------------------------------------
true
false
function determine(item, idx, arr) { //2. 6이 참이면 탐색 stop!
if(item % 2 === 0) {
return true;
} else {
return false;
}
}
let arr = [1,3,5,6,8];
let index = arr.findIndex(determine); //1. determine의 참인지 판단
console.log(index);//3. index 값에 6의 인덱스 번호인 3 출력!
-----------------------------------------------------------
3
let arr = [1,3,5,6,8];
let index = arr.findIndex((item) =>
item % 2 === 0 ? true : false
);
console.log(index);
let arr = [
{ name: "이종원" },
{ name: "이정환" },
{ name: "신다민" },
{ name: "김효빈" }
];
let index = arr.findIndex((item) => item.name === "이정환");
console.log(index);
-------------------------------------------------------------
1
let arr = [
{ name: "이종원" ),
{ name: "이정환" ),
{ name: "신다민" ),
{ name: "김효빈" )
];
let index = arr.find((item) => item.name === "이정환");
console.log(index);
-------------------------------------------------------------
{ name: "이정환" )
let arr = [
{ name: "이종원", hobby: "축구" },
{ name: "이정환", hobby: "영화" },
{ name: "신다민", hobby: "축구" },
{ name: "김효빈", hobby: "노래" }
];
let filteredArr = arr.filter(
(item) => item.hobby === "축구"
);
console.log(filteredArr);
-----------------------------------------------------------
0: Object
name: "이종원"
hobby: "축구"
1: Object
name: "신다민"
hobby: "축구"
//배열의 모든 요소에 3을 곱해 얻은 값 새 배열로 만들기
let arr = [1,2,3,4];
let newArr = arr.map((item) => item * 3 );
console.log(newArr);
------------------------------------------------------------
[3,6,9,12]
let arr = [10, 5, 3];
arr.sort();
console.log(arr)
----------------------------------------------------------
[10,3,5]
→ 비교함수가 필요하다. (문자열로 취급해 사전순으로 정렬하기 때문에)
let arr = ["안녕", "나는", "이정환"];
console.log(arr.join());
console.log(arr.join("-"));
let arr = [1,2,3,4,5];
let result = arr.reduce((acc, item) => acc + item, 0);
//초기 : 0 + 1 + 2 + 3 + 4 + 5
console.log(result);
--------------------------------------------------------
15
//현재 날짜 및 시간 출력하기
let date = new Date();
console.log(date);
// 타임스템프로 출력하기 Date(0)
let Jan01_1970 = new Date(0);
let date1 = new Date(2000, 10, 20, 0,0,0,0); //11월
let date2 = new Date(2000, 9, 10); //10월
let date = new Date(2000, 9, 10);
let timeStamp = date.getTime(); //Date 객체에 저장된 날짜를 타임스탬프로 변환해준다.
console.log(timeStamp);
let dateClone = new Date(timeStamp); // 타임스탬프 값을 인수로 전달하면 자동으로 날짜를 반환해 준다.
console.log(dateClone);
let date = new Date(2000, 9, 10);
console.log(date.getFullYear());
console.log(date.getDate()); //9
console.log(date.getDate()); //10
console.log(date.getDay); //2 - 화요일
console.log(date.getHours()); //0
console.log(date.getMinutes()); //0
console.log(date.getSeconds()); //0
console.log(date.getMilliseconds()); //0
let date = new Date(2000, 9, 10);
date.setFullYear(2021);
date.setMonth(10);
date.setDate(11);
date.setHours(1);
date.setMinutes(1);
date.setSeconds(1);
const today = new Date(2000, 9, 10, 22);
console.log(today.toString());
-----------------------------------------------------------
Tue Oct 10 2000 22:00:00 GMT+0900 (한국표준시)
console.log(today.toDateString());
---------------------------------------------------------
Tue Oct 10 2000
function moveMonth(date, moveMonth) { //Date객체, 이동할 월의 수
const curRimestamp = date.getTime(); //타임스템프를 변수에 저장
const curMonth = date.getMonth(); // 월을 구해 변수에 저장
const resDate = new Date(curTimestamp); //date 객체와 동일한 타임스탬프 값이 들어있는 Date 객체가 저장되어있음.
reDate.setMonth(curMonth + moveMonth); //reDate에 저장된 Date 객체에서 setMonth를 호촐해 moveMonth 만큼 더한 월을 새로운 월로 지정함.
return reDate;
}
const dateA = new Date("2000-10-10");
console.log("A: ", dateA);
const dateB = moveMonth(dateA, 1);
console.log("B: ", dateB);
const dateC = moveMonth(dateA, -1);
console.log("C: ", dateC);
--------------------------------------------------------------
A : Tue Oct 10 2000 09:00:00 GMT+0900
B : Fri Nov 10 2000 09:00:00 GMT+0900
C : Sun Sep 10 2000 09:00:00 GMT+0900
function filterThisMonth(pivotDate, dateArray) {//pivotDate: 필터링할 월이 있는 Date 객체, dateArray: Date객체
const year = pivotDate.getFullYear();
const month = pivotDate.getMonth();
//이번달에 가장 빠른 시간인 10월 1일 0시 0분 0초로 설정한다.
const startDay = new Date(year, month, 1, 0,0,0,0);
//이번달에 가장 마지막인 다음달 0일 23시 59분 59초로 설정한다.
const endDay = new Date(year, month+1, 0, 23, 59, 59);
const resArr = dateArray.filter((it) =>
startDay.getTime() <= it.getTime() && //it이 startDat와 같거나 이후인지
it.getTime() <= endDay.getTime() //it이 endDay와 같거나 이전인지
);
retrun resArr;
}
const dateArray = [
new Date("2000-10-1");
new Date("2000-10-31");
new Date("2000-11-1");
new Date("2000-9-3");
new Date("1900-10-11");
];
//오늘이 2000년 10월 10일이라고 가정
const today = new Date("2000-10-10/00:00:00");
const filterArray = filterThisMonth(today, dateArray);
console.log(filteredArray);
-----------------------------------------------------------
0 : Sun Oct 01 2000 00:00:00 GMT+0900
1 : Tue Oct 31 2000 00:00:00 GMT+0900
function double(num, cb) {
setTimeout(() =>
const doubleNum = num *2; // 2배를 하고
cb(doubleNum); // 콜백함수로 출력해라
}, 1000);
}
double(10, (res) => { //num : 10, cb: res
console.log(res);
});
console.log("마지막"); // 먼저 출력
//프로미스 객체의 실행 함수
const promise = new Promise(
function (resolve, reject) {
setTimeout( () => {
console.log("안녕");
}, 500);
}
});
const promise = new Promise(
function (resolve, reject) {
setTimeout(() => {
resolve("성공");
}, 500);
}
});
promise.then(function (res) { // then 메서드를 호출하고 콜백함수를 전달한다. resolve를 호출했을때 실행된다.
console.log(res);
});
const promise = new Promise(
function (resolve, reject) {
setTimeout(() => {
reject("실패");
}, 500);
}
};
promise.then(function (res {
console.log(res);
});
promise.catch(function (err) { //실행 함수에서 reject에 전달된 인수가 매개변수로 제공된다.
console.log(err);
});
<프로그래밍 문제>
1. 현재 날짜, 시간을 변수에 받은 후 달만 출력하시오. (달은 왜 1이 적은지 설명하시오.)
2. 프로미스 객체를 생성할 때 , “성공”하게 만들기 위한 2가지 빈칸을 채우시오.
const promise = new Promise(
function (resolve, reject) {
setTimeout(() => {
_____(1)____("성공");
}, 500);
}
});
promise.___(2)___(function (res) {
console.log(res);
});
1.
let date = new Date();
console.log(date.getMonth());
// 달은 0~11까지 있기 때문에 1이 적다.
2.
const promise = new Promise(
function (resolve, reject) {
setTimeout(() => {
resolve("성공");
}, 500);
}
});
promise.then(function (res) {
console.log(res);
});
출처 : 이정환, 『한 입 크기로 잘라먹는 리액트』, 프로그래밍인사이트(2023), p88-128.
Corner React.js 3
Editor: smurfs
[리액트 스타터3] project 1 [카운터] 앱 만들기 6장. 라이프 사이클과 리액트 개발자 도구 (0) | 2023.11.17 |
---|---|
[리액트 스타터3] 5장. 리액트의 기본 기능 다루기 2 (0) | 2023.11.10 |
[React.js 3] 5장. 리액트의 기본 기능 다루기 1 (1) | 2023.11.03 |
[React.js 3] 3장. Node.js - 4장. 리액트 시작하기 (0) | 2023.10.13 |
[React.js 3] 1장. 자바스크립트 기초 (0) | 2023.09.29 |