지난 날들 중 가장 최근 날짜 찾기(with find)

장현광·2021년 4월 22일
0

알고리즘

목록 보기
3/8
post-thumbnail

프로젝트를 하는 도중,

const STD_Date = 20210409

const allDays = [
  {date: 20210310,
   point: 100},
  {date: 20210315,
   point: 110},
  {date: 20210320,
   point: 119},
  {date: 20210327,
   point: 132},
  {date: 20210402,
   point: 127},
  {date: 20210411,
   point: 134},
  {date: 20210316,
   point: 142}

와 같은 상황에서 STD_Date로 주어진 날짜를 기준으로 allDaysdate 중 같은 날짜거나 지난 날짜들 중에서 가장 최근의 날을 가져오기 위한 알고리즘을 짜느라 고민을 하게되었다.

처음에는 for문이나 map을 사용해서 전체 배열을 돌아서 그 중 최소의 값을 찾아내는 방향을 해보려고 했는데, find()라는 메소드를 알게 되어서 사용해 보았다.

find()는 배열의 처음부터 시작해서 map이나 filter와는 다르게 원하는 조건을 충족하는 값을 찾으면 바로 break 된다.

따라서,

  1. allDays를 내림차순으로 정렬 한 뒤,
  2. find(el => el.date - STD_Date <= 0)을 해주면
  3. 같은 값 혹은 그 직전의 값을 반환해주면서 끝난다.

allDays.sort(function(a, b) {return b.date - a.date})
console.log(allDays)

const wanted = allDays.find(el => el.date - STD_Date <= 0)
console.log(wanted)

/*
0: Object { date: 20210411, point: 134 }
1: Object { date: 20210402, point: 127 }
2: Object { date: 20210327, point: 132 }
3: Object { date: 20210320, point: 119 }
4: Object { date: 20210316, point: 142 }
5: Object { date: 20210315, point: 110 }
6: Object { date: 20210310, point: 100 }
*/

// Object { date: 20210402, point: 127 }
profile
프론트!

0개의 댓글