2017-11-02 10 views
0

개체의 고유 키를 가져 와서 값을 추가하고 각각에 고유 키가 몇 개인 지 계산하려고하지만 할 수는 없습니다. 우아한 해결책을 찾으십시오. OBJS의개체의 일치하는 고유 키 수 (자바 스크립트)

원시 배열 :

[{ 
    "2017W40": 15.25 
}, { 
    "2017W40": 16.5 
}, { 
    "2017W40": 16.6 
}, { 
    "2017W40": 11 
}, { 
    "2017W40": 17.857142857142858 
}, { 
    "2017W40": 13 
}, { 
    "2017W41": 19 
}, { 
    "2017W41": 20.25 
}, { 
    "2017W41": 18.25 
}, { 
    "2017W41": 13 
}, { 
    "2017W41": 20.333333333333332 
}, { 
    "2017W41": 20.5 
}, { 
    "2017W41": 20.5 
}, { 
    "2017W42": 19.5 
}, { 
    "2017W42": 19.5 
}, { 
    "2017W42": 20 
}, { 
    "2017W42": 19.5 
}, { 
    "2017W42": 19.333333333333332 
}, { 
    "2017W42": 20 
}, { 
    "2017W42": 20.5 
}, { 
    "2017W43": 20 
}, { 
    "2017W43": 20 
}, { 
    "2017W43": 19.666666666666668 
}, { 
    "2017W43": 19.6 
}, { 
    "2017W43": 19.666666666666668 
}, { 
    "2017W43": 19 
}, { 
    "2017W43": 19.5 
}, { 
    "2017W44": 21 
}, { 
    "2017W44": 19.5 
}, { 
    "2017W44": 20 
}, { 
    "2017W44": 19.5 
}] 

요약 목적 :

{ 
    "2017W40": 90.20714285714286, 
    "2017W41": 131.83333333333331, 
    "2017W42": 138.33333333333331, 
    "2017W43": 137.43333333333334, 
    "2017W44": 80 
} 

그러나 나는 또한 그래서 난 그냥 합 대신 평균을 얻을 수있는 각 (의 수를 포함하려면

function getValueAvg(valsByKey) { 
    const dateObj = {}; 
    for (let i = 0; i < valsByKey.length; ++i) { 
    for (const obj in valsByKey[i]) { 
     if (dateObj[obj]) { 
     // add them if exists already 
     dateObj[obj] = dateObj[obj] + valsByKey[i][obj]; 
     } else { 
     // first 
     dateObj[obj] = valsByKey[i][obj]; 
     } 
    } 
    } 

그래서

012,351,641 최종 목적 중 하나) 여기서 I "사용하고있어서 인
{ 
    {"2017W40": 90.20714285714286, count:x}, 
    {"2017W41": 131.83333333333331, count:x}, 
    {"2017W42": 138.33333333333331, count:x}, 
    {"2017W43": 137.43333333333334, count:x}, 
    {"2017W44": 80, count:x} 
} 

또는 단지 값을 count로 나눈 값이 저의 놀라운 점입니다. "2017W40": 90.20714285714286/count

답변

0

두 개의 필드, 값 또는 요약 필드 및 개수 필드가있는 새 개체를 만들면됩니다. 데이터를 반복 할 때 값 필드에 추가 한 다음 개수를 하나 늘립니다.

function getValueAvg(valsByKey) { 
 
    const dateObj = {}; 
 
    for (let i = 0; i < valsByKey.length; ++i) { 
 
    for (const obj in valsByKey[i]) { 
 
     if (dateObj[obj]) { 
 
     // add them if exists already 
 
     dateObj[obj].val = dateObj[obj].val + valsByKey[i][obj]; 
 
     dateObj[obj].count += 1; 
 
     } else { 
 
     // first 
 
     dateObj[obj] = {"val":valsByKey[i][obj], "count":1}; 
 
     } 
 
    } 
 
    } 
 
    return dateObj; 
 
} 
 

 
var data = [{ 
 
    "2017W40": 15.25 
 
}, { 
 
    "2017W40": 16.5 
 
}, { 
 
    "2017W40": 16.6 
 
}, { 
 
    "2017W40": 11 
 
}, { 
 
    "2017W40": 17.857142857142858 
 
}, { 
 
    "2017W40": 13 
 
}, { 
 
    "2017W41": 19 
 
}, { 
 
    "2017W41": 20.25 
 
}, { 
 
    "2017W41": 18.25 
 
}, { 
 
    "2017W41": 13 
 
}, { 
 
    "2017W41": 20.333333333333332 
 
}, { 
 
    "2017W41": 20.5 
 
}, { 
 
    "2017W41": 20.5 
 
}, { 
 
    "2017W42": 19.5 
 
}, { 
 
    "2017W42": 19.5 
 
}, { 
 
    "2017W42": 20 
 
}, { 
 
    "2017W42": 19.5 
 
}, { 
 
    "2017W42": 19.333333333333332 
 
}, { 
 
    "2017W42": 20 
 
}, { 
 
    "2017W42": 20.5 
 
}, { 
 
    "2017W43": 20 
 
}, { 
 
    "2017W43": 20 
 
}, { 
 
    "2017W43": 19.666666666666668 
 
}, { 
 
    "2017W43": 19.6 
 
}, { 
 
    "2017W43": 19.666666666666668 
 
}, { 
 
    "2017W43": 19 
 
}, { 
 
    "2017W43": 19.5 
 
}, { 
 
    "2017W44": 21 
 
}, { 
 
    "2017W44": 19.5 
 
}, { 
 
    "2017W44": 20 
 
}, { 
 
    "2017W44": 19.5 
 
}] 
 

 
console.log(getValueAvg(data));