This is my array:
var input = [
{
date: '2017-07-19',
number: 10
},
{
date: '2017-07-20',
number: 7.5
},
{
date: '2017-07-20',
number: 9
},
{
date: '2017-07-21',
number: 8
},
{
date: '2017-07-22',
number: 9.3
},
{
date: '2017-07-22',
number: 6
},
{
date: '2017-07-23',
number: 5.8
},
{
date: '2017-07-23',
number: 7.2
},
{
date: '2017-07-24',
number: 9
}
];
And this is what I would like to accomplish
var output = [
{
date: '2017-07-19',
number: [10],
average: 10
},
{
date: '2017-07-20',
number: [10, 7.5, 9],
average: 8.8
},
{
date: '2017-07-21',
number: [10, 7.5, 9, 8],
average: 8.6
},
{
date: '2017-07-22',
number: [10, 7.5, 9, 8, 9.3, 6],
average: 8.3
},
{
date: '2017-07-23',
number: [10, 7.5, 9, 8, 9.3, 6, 5.8, 7.2],
average: 7.9
},
{
date: '2017-07-23',
number: [10, 7.5, 9, 8, 9.3, 6, 5.8, 7.2, 9],
average: 7.9
}
];
So far I can only add the numbers with the same dates and calculate the average of the numbers.
var temp = {};
var obj = null;
for (i = 0; i < input.length; i++) {
obj = input[i];
if (!temp[obj.date]) {
temp[obj.date] = obj;
} else {
temp[obj.date].number += obj.number;
}
}
var counter = {};
for (i = 0; i < input.length; i += 1) {
counter[input[i].date] = (counter[input[i].date] || 0) + 1;
}
for (var key in counter) {
if (counter[key] > 1) {
}
}
var out = [];
for (var date in temp)
out.push(temp[date]);
var finalOutput = [];
for (i = 0; i < out.length; i++) {
finalOutput.push({
date: out[i].date,
mean: Math.round(out[i].number / counter[out[i].date] * 10) / 10
});
}
console.log(finalOutput);
But I do not know how to make the var output array.
Thanks so much for your help!
mean?