[과제 21] 날짜와 시간
Assignment
미국을 비롯해 전세계 대부분의 나라들이 생일을 기준으로 나이를 계산 합니다. 쉽게 말해 미국은 태어나자마자 0살이고 생일을 지나야 비로소 한 살이 됩니다. 반면에 한국은 태어나자마자 1살이고 연도가 바뀔 때마다 한 살씩 먹습니다. 예를 들어 미국에서는 1995년 9월 12일에 태어났으면 1995년 9월 12일에는 0살이고 1996년 9월 12일이 되야 1살이 됩니다. 그에 비해 한국에서는 1995년 9월 12일에 태어나자마자 1살이고 1996년 1월 1일에 2살이 됩니다. 1살 차이도 크게 생각하는 우리나라 고유의 문화에 비롯한 계산법이 아닌가 추측해 봅니다. 미국이나 다른 나라가 사용하는 나이 계산법은 우리나라에서는 만 나이 라고 하죠.
앞서 말한 만으로 계산한 나이를 구하는 함수인 getWesternAge 함수를 구현해 봅시다.
- 이 함수는 birthday 라는 인자를 받습니다.
- 이 birthday 는 Date 객체 입니다. birthday 라는 인자를 넣었을 때, 현재를 기준으로 만으로 계산한 나이를 리턴 해주세요.
- birthday 는 string이 아닌 Date 객체라는 걸 명심하세요 :)
- 예를 들어, 오늘이 2020년 7월 21일이고, birthday 값이 다음과 같다면:리턴 값은 30 이 되어야 합니다.
- 1990-03-21T00:45:06.562Z
function getWesternAge(birthday) {
let birthYear = birthday.getFullYear();
let birthMonth = birthday.getMonth() + 1;
let birthDay = birthday.getDay();
let today = new Date();
let nowYear = today.getFullYear();
let nowMonth = today.getMonth() + 1;
let nowDay = today.getDay();
let age = nowYear - birthYear;
if(nowMonth === birthMonth && nowDay >= birthDay || nowMonth > birthMonth){
return age ;
}
else{
return age - 1;
}
}
- birthday라는 인자를 받아서 년 월 일로 각각 변수에다가 담았다
- 오늘 날짜로도 각각의 변수에다가 나누어서 담았다
- age라는 변수에다 오늘 날짜 - 생년 뺀 변수를 만들고
- 조건문으로 현재 월 일이 같을때는 age를 바로 리턴하고 생일이 안 지났을 경우에는 -1를 해줘서 리턴해준다
[과제 22] Number
Assignment
최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 return 하는 함수를 구현해주세요.
- 함수는 짧지만, 이번에는 수학의 뇌를 조금 써야 하는 assignment 입니다. 🙌
- 앞으로 랜덤함수를 쓸 일이 정말 많습니다.
- 그런데 Math.random() 으로는 내가 원하는 범위의 랜덤수를 얻을 수가 없습니다.
- 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문이죠.
// Assignment
function getRandomNumber (min, max) {
return Math.random() * (max-min) + min;
}
let startWithNames = [];
let names = [‘a’, ‘ab’, ‘cbb’, ‘ada’];
names.forEach(el => {
if (el.startsWith(‘a’)) {
startWithNames.push(el);
}
});
[과제 23] Object (객체)
Assignment
이제까지 하셨던 Assignment 와는 조금 다른 유형입니다. 그 동안에는 특정값을 구해서 리턴 했다면, 이번에는 인자로 받은 데이터를 조합해서, 구조를 바꿔서 리턴합니다.
getData 함수를 구현해주세요!
- getData 함수는 세 개의 배열을 인자로 받습니다.
- salesArr : 날짜별 판매량
- ex) [["20190401", 34], ["20190402", 23], ["20190403", 29]]
- reviewArr : 날짜별 리뷰수
- ex) [["20190328", 3], ["20190401", 0], ["20190403", 1]]
- likeArr : 날짜별 좋아요수
- ex) [["20190328", 98], ["20190401", 102], ["20190403", 125]]
- salesArr : 날짜별 판매량
- 다음 요구사항을 충족하는 객체를 만들어서 return 해주세요.
- 리턴되는 객체는 아래와 같이 3개의 property를 가집니다.
- sumAmount : 총 판매량
- sumReview : 총 리뷰개수
- sumLike : 총 좋아요수
function getData(salesArr,reviewArr,likeArr){
let sumAmount = 0;
let sumReview = 0;
let sumLike =0;
for(let i = 0; i < salesArr.length; i++){
sumAmount = sumAmount + salesArr[i][1];
}
for(let i = 0; i < reviewArr.length; i++){
sumReview = sumReview + reviewArr[i][1];
}
for(let i = 0; i < likeArr.length; i++){
sumLike = sumLike + likeArr[i][1];
}
let obj = {
sumAmount,
sumReview,
sumLike
}
return obj;
}
[과제 24] Scope
Assignment
코드를 작성하는 맨 아래에 whatIs 라는 함수를 만들어 놓았습니다. 이번에는 무엇을 구현하는 Assignment가 아닙니다. 위에 내용이 잘 정리 되었는지 궁금하네요!
case 오른쪽에 설명해야 할 단어를 텍스트로 작성해놨습니다. description 변수에 해당 단어에 대한 설명을 딱 한 문장으로 작성해주세요.
- 강의 내용을 참고 하셔도 되고 인터넷에서 검색해도 됩니다. 이해하신대로 가볍게 작성해주세요.
- 그리고 처음보는 switch 문이 있습니다. switch 문이 무엇인지 궁금한 사람은 아래에서 읽고 사용법을 익혀주세요.
- 궁금한 것이 있다면 stackoverflow에 질문을 올려주세요!
// Assignment
function whatIs(type) {
let description;
switch (type) {
case 'scope':
description = '변수에 대한 영역 / 범위';
break;
case 'block':
description = 'if/for/function 등 중괄호로 감싸진 모든 부분을 block이라 한다';
break;
case 'global scope':
description = 'block밖에 있는 전역 스코프';
break;
case 'global variable':
description = '어디서든 접근 가능한 전역 스코프에서 존재하는 변수';
break;
case 'block scope':
description = '중괄호로 감싸진 스코프 영역';
break;
case 'local variable':
description = '내부에서만 사용할 수 있는 지역변수들 외부에서는 못 쓴다';
break;
case 'global namespace':
description = '변수 이름의 사용범위';
break;
case 'scope pollution':
description = '전역변수가 살아있기 때문에 어디서 어떻게 수정될지 모른다';
break;
default :
description = 'Wecode 짱'
break;
}
return description;
}
[과제 25] Class
Assignment
class 생성을 연습해보겠습니다.
- MyMath 라는 class를 생성해주세요.
- constructor 에서는 숫자 2개를 인자로 받아 프로퍼티로 저장합니다.
- 총 4개의 메서드를 구현해주세요.
- getNumber : 두 개의 숫자가 무엇인지 배열로 반환하는 메서드 → ex) [1, 2]
- add : 두 개의 숫자를 더하는 메서드
- substract : 두 개의 숫자를 빼는 메서드
- multiply : 두 개의 숫자를 곱하는 메서드
class MyMath {
constructor(num, num2){
this.num = num;
this.num2 = num2;
}
getNumber(a,b){
let c = [this.num, this.num2];
return c;
}
add(c,d){
return this.num + this.num2;
}
substract(e,f){
return this.num - this.num2;
}
multiply(g,h){
return this.num * this.num2;
}
}