DAY 12 - javascript

연주·2022년 11월 27일
0

TIL

목록 보기
20/37

22.11.25 금

DAY 12 - javascript (기초다지기)

📖 풀어보기

✏️ n일 전 '일' 출력하기

  • date를 기준으로 days일 전 '일’을 반환하는 함수 getDateAgo(date, days)를 만들어보세요,

  • 오늘이 20일이라면 getDateAgo(new Date(), 1)는 19를, getDateAgo(new Date(), 2)는 18을 반환해야 합니다.

  • days가 365일 때도 제대로 동작해야 합니다.

let date = new Date(2015, 0, 2); // 2015년 1월 2일

alert( getDateAgo(date, 1) ); // 1, (2015년 1월 1일)
alert( getDateAgo(date, 2) ); // 31, (2014년 12월 31일)
alert( getDateAgo(date, 365) ); // 2, (2014년 1월 2일)
주의: 함수는 date를 변경하지 않아야 합니다.

➡️

let date = new Date(2015, 0, 2);
function getDateAge(date, days) {
  console.log(date);
  let newDate = date;
  newDate.setDate(newDate.getDate() - days);
  console.log(newDate.getDate());
  return newDate.getDate();
}

console.log(getDateAge(date, 1));

뭔가 처음에 생각한대로 쓰는데 잘 안나와서 한줄 한줄 콘솔에 찍으면서 푸니까 점점 수월해졌다!!

✏️ 달의 마지막 일
특정 달의 마지막 일을 반환하는 함수 getLastDayOfMonth(year, month)를 작성해보세요. 반환 값은 30이나 31, 29(2월), 28(2월)이 될 겁니다.

매개변수:

  • year – 숫자 4개로 구성된 연(예: 2012)
  • month – 월(0부터 11)
    윤년인 2012년의 2월은 29가 반환되어야 합니다.

getLastDayOfMonth(2012, 1) = 29

➡️

function getLastDayOfMonth(year, month) {
  let date = new Date(year, month + 1, 0);
  console.log(date);
  console.log(date.getDate());
}

왜 1을 더해야하는지 , 0을 붙여하는지!
기본값이 1 이라 0을 안붙이면, 자동으로 달의 1일로 지정
그래서, 0을 넘기면, 첫번째 일의 1일 전 === 이전 달의 마지막일
이건 어렵다!!

✏️ 몇 초나 지났을까요?
오늘 하루가 시작된 이후 몇 초나 지났는지 반환하는 함수 getSecondsToday()를 만들어보세요.

현재 시각이 10:00 am이고, 서머타임이 적용되지 않은 경우라면 아래와 같은 결과가 나와야 합니다.

getSecondsToday() == 36000 // (3600 * 10)

주의: 어떤 날이든 함수를 호출했을 때, 원하는 결과가 반환되어야 합니다. '오늘’을 나타내는 값을 하드 코딩하지 마세요.
➡️

function getSecondsToday() {
  let date = new Date();
  console.log(date);
  console.log(date.getHours() * 3600);
  console.log(date.getMinutes() * 60);
  console.log(date.getMinutes());
  return date.getHours() * 3600 + date.getMinutes() * 60 + date.getMinutes();
}

getSecondsToday();

역시 콘솔로 찍으면서 해보기!!

📌 JSON과 매서드

  • JSON.stringify

JSON.stringify – 객체를 JSON으로 바꿔줍니다.
JSON.parse – JSON을 객체로 바꿔줍니다.

📖 풀어보기

✏️ 객체를 JSON으로 바꾼 후 다시 객체로 바꾸기
user를 JSON 형태의 문자열로 바꾼 다음 이를 다시 객체로 바꾼 후 제2의 변수에 저장해보세요.

let user = {
  name: "John Smith",
  age: 35
};

➡️

let userJson = JSON.stringify(user);
console.log(userJson);
// 문자열

let userJsonParse = JSON.parse(userJson);
console.log(userJsonParse);
//다시 객체

✏️ 역참조 배제하기
순환 참조가 있는 경우 프로퍼티 이름을 사용해 순환 참조를 만드는 프로퍼티를 직렬화에서 배제할 수 있습니다.

그런데 이 프로퍼티가 순환참조도 만들면서 일반 프로퍼티 역할을 하는 경우라면 단순히 이런 식으로 직렬화에서 배제할 수 없습니다. 이럴 땐 값을 이용해 해당 프로퍼티를 확인할 수밖에 없습니다.

meetup을 참조하는 프로퍼티를 제외한 모든 프로퍼티를 직렬화해주는 replacer 함수를 작성해보세요.

let room = {
  number: 23
};

let meetup = {
  title: "Conference",
  occupiedBy: [{name: "John"}, {name: "Alice"}],
  place: room
};

// 순환 참조
room.occupiedBy = meetup;
meetup.self = meetup;

alert( JSON.stringify(meetup, function replacer(key, value) {
  /* 코드를 작성할 곳 */
	return (key != "" && value == meetup) ? undefined : value;
}));

/* 얼럿창엔 아래와 같은 결과가 출력되어야 합니다.
{
  "title":"Conference",
  "occupiedBy":[{"name":"John"},{"name":"Alice"}],
  "place":{"number":23}
}
*/

💬 오늘의 느낀점
JSON 형식으로 만들거나 다시 객체로 만드는 것은 이해를 했다!!
그치만 순환참조 부분을 잘 모르겠다..
붙잡고 있다가는 끝이 안날 거 같아서 일단 위에 내용에 추가로 설명이 잘 되어있는 것을 찾아서 다시 하는거로..

profile
성장중인 개발자🫰

0개의 댓글