iot에 관한 프로젝트 진행 중
json 객체 내 다수의 timestamp 중 가장 높은 값을 찾을 일이 생겼다.
해당 json 객체의 형태는
{
"metadata": {
"desired": {
"welcome": {
"timestamp": 1613530483
},
"welcome2": {
"timestamp": 1613530483
},
"welcome3": {
"timestamp": 1613530483
}
},
"reported": {
"welcome": {
"timestamp": 1613530483
},
"welcome3": {
"timestamp": 1613530483
},
"welcome2": {
"timestamp": 1613530483
}
}
},
"version": 11,
"timestamp": 1613540953
}
위와 같은 형태이며 특징으로는 timestamp 바로 상위 key의 값이 정해지지 않았다는 점이다.
예시에서는 welcome, welcome2, welcome3가 있으나 대부분의 경우는 attribute의 개수 및 키값이 다를 것이다.
String 형태로 활용하여 timestamp가 포함된 행의 숫자를 읽어오는 방법이 떠올랐으나 너무 원시적인 것 같아서 json 객체 관점에서 해결하는 방법을 찾아보기로 하였다.
json 와일드카드에 관해 리서치를 진행해보던 중 map을 활용하는 방법을 발견하여 아래와 같이 해결하였다.
let lastTimeStamp = function(obj) {
let lastUpdate = 0;
Object.keys(obj).map(function(elem) {
if(obj[elem].timestamp>lastUpdate)
lastUpdate = obj[elem].timestamp;
});
return lastUpdate;
}
맨 위 코드블록 예시의 경우 metadata.desired, metadata.reported까지만 함수에 넣어주면 그 하위 키값을 순회하며 timestamp에 순차적으로 접근, 가장 큰 값을 찾아서 반환하는 함수이다.
눈여겨볼만한 부분은 if문 및 대입문에 elem이 아닌 obj[elem]을 사용했다는 점이다.
map을 활용하여 인자를 뽑아내면 String 형태이기 때문에 Object를 직접 활용한 부분이다.
분명 더 나은 해결 방법이 있을 것 같으니 피드백 달아주시면 감사히 배우겠습니다. :)
'' 카테고리의 다른 글
Javascript HashSet (0) | 2021.03.08 |
---|---|
Json 객체 length 구하기 (4) | 2021.02.02 |