프로젝트를 하는 도중,
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
로 주어진 날짜를 기준으로 allDays
의 date
중 같은 날짜거나 지난 날짜들 중에서 가장 최근의 날을 가져오기 위한 알고리즘을 짜느라 고민을 하게되었다.
처음에는 for
문이나 map
을 사용해서 전체 배열을 돌아서 그 중 최소의 값을 찾아내는 방향을 해보려고 했는데, find()
라는 메소드를 알게 되어서 사용해 보았다.
find()
는 배열의 처음부터 시작해서 map
이나 filter
와는 다르게 원하는 조건을 충족하는 값을 찾으면 바로 break
된다.
따라서,
allDays
를 내림차순으로 정렬 한 뒤,find(el => el.date - STD_Date <= 0)
을 해주면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 }