TIL29 - JavaScript Replit Assignment [vol.5]

오지수·2021년 6월 14일
0

JavaScript

목록 보기
16/18
post-thumbnail

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 값이 다음과 같다면:
1990-03-21T00:45:06.562Z
1990-03-21T00:45:06.562Z

리턴 값은 30 이 되어야 합니다.

My code

function getWesternAge(birthday) {
  // 현재 날짜에서 년도, 월, 일 추출
  const now = new Date();
  const year = now.getFullYear();
  const month = now.getMonth() + 1;
  const date = now.getDate();
  
  // 생일 날짜에서 년도, 월, 일 추출
  const birthYear = birthday.getFullYear();
  const birthMonth = birthday.getMonth() + 1; // 6
  const birthDate = birthday.getDate(); // 18
  
  // 현재 날짜를 기준으로 생일 날이 지나지 않았다면 -1
  if ((month < birthMonth) && (date < birthDate)) {
     return (year - birthYear) - 1;
  } else {
    return year - birthYear;
  }  
}

Result

[2021.6.14일 기준!]


22. Number

::Assignment::

최소(min), 최대값(max)을 받아 그 사이의 랜덤수를 return 하는 함수를 구현해주세요.

  • 함수는 짧지만, 이번에는 수학의 뇌를 조금 써야 하는 assignment 입니다. 🙌
  • 앞으로 랜덤함수를 쓸 일이 정말 많습니다.
  • 그런데 Math.random() 으로는 내가 원하는 범위의 랜덤수를 얻을 수가 없습니다.
  • 항상 0.0000000000000000에서 0.9999999999999999 사이 값만 return 해주기 때문이죠.

My code

function getRandomNumber (min, max) {
  // 1.0 ~ 1.99...
  // 10 ~ 19
  return Math.random() * (max-min)  + min
}
  • min = 1, max = 10을 받았다면 Math.random() * 9 + 1
  • Math.random()은 0.0000000000000000 ~ 0.9999999999999999 사이의 랜덤한 수를 출력
  • Math.random() * 9를 할 경우 0.000... ~ 8.999999...
  • 마지막으로 +1을 하면 최종적으로 1.000... ~ 9.999.... 1~10 사이의 랜덤한 수를 출력하게 된다.

Result


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]]
  • 다음 요구사항을 충족하는 객체를 만들어서 return 해주세요.
  • 리턴되는 객체는 아래와 같이 3개의 property를 가집니다.
    • sumAmount : 총 판매량
    • sumReview : 총 리뷰개수
    • sumLike : 총 좋아요수

My code

function getData(salesArr,reviewArr,likeArr){
  
  let sumSales = 0;
  let sumReviews = 0;
  let sumLikes = 0;
  // salesArr의 총합
  for (let i = 0; i < salesArr.length; i++) {
    sumSales += salesArr[i][salesArr[i].length - 1];
  }
  // reviewArr의 총합
  for (let i = 0; i < reviewArr.length; i++) {
    sumReviews += reviewArr[i][reviewArr[i].length - 1];
  }
  // likeArr의 총합
  for (let i = 0; i < likeArr.length; i++) {
    sumLikes += likeArr[i][likeArr[i].length - 1];
  }
  // 총합을 객체로
  const obj = {
    sumAmount: sumSales,
    sumReview: sumReviews,
    sumLike: sumLikes
  };
    
  return obj;
}

Result


25. Class

::Assignment::

MyMath 라는 class를 생성해주세요.

  • constructor 에서는 숫자 2개를 인자로 받아 프로퍼티로 저장합니다.
  • 총 4개의 메서드를 구현해주세요.
  • getNumber : 두 개의 숫자가 무엇인지 배열로 반환하는 메서드 → ex) [1, 2]
    • add : 두 개의 숫자를 더하는 메서드
    • substract : 두 개의 숫자를 빼는 메서드
    • multiply : 두 개의 숫자를 곱하는 메서드

My code

class MyMath {
  constructor(num1, num2) {
    this.num1 = num1;
    this.num2 = num2;
  }
  
  getNumber() {
    return [this.num1, this.num2];
  }
  
  add() {
    return this.num1 + this.num2;
  }
  
  substract() {
    return this.num1 - this.num2;
  }
  
  multiply() {
    return this.num1 * this.num2;
  }
}

Result

profile
My Moto:: 내 스스로와 더불어 주변에게도 좋은 영향을 행사하도록 점검 & 노력..!!

0개의 댓글