Если вы хотите, чтобы в среднем каждые 5 элементов означали в среднем
0,1,2,3,4
1,2,3,4,5
2,3,4, 5,6
3,4,5,6,7
и т. Д.
Я предполагаю это, потому что похоже, что ваш код пытается это сделать
Это должно обеспечить необходимый вам результат
const input = [
{
"value": "2,335.47"
},
{
"value": "2,862.96"
},
{
"value": "2,217.31"
},
{
"value": "1,627.01"
},
{
"value": "1,103.52"
},
{
"value": "1,718.69"
},
{
"value": "1,992.83"
},
{
"value": "3,796.26"
},
{
"value": "3,800.43"
},
{
"value": "2,128.62"
},
{
"value": "2,661.56"
}
];
const result = Array.from({length:input.length-4}, (_, i) => Number((input.slice(i, i+5).reduce((acc, {value}) => acc + +value.replace(',', ''), 0)/5).toFixed(3)));
console.log(result);
Относительно .toFixed(3)
Это ограничение ограничено 3 десятичными знаками, поскольку в среднем от 5 значений до 2 десятичных знаков будет только 3десятичные разряды - использование toFixed
предотвращает такие значения, как 2029.2540000000001 и 2047.6619999999998, которые могут переместиться в с плавающей запятой Math
Альтернативный метод, который легче читать и, возможно, немного быстрее (например, кого это волнует, если у вас нет МИЛЛИОНОВзаписи)
const input = [
{
"value": "2,335.47"
},
{
"value": "2,862.96"
},
{
"value": "2,217.31"
},
{
"value": "1,627.01"
},
{
"value": "1,103.52"
},
{
"value": "1,718.69"
},
{
"value": "1,992.83"
},
{
"value": "3,796.26"
},
{
"value": "3,800.43"
},
{
"value": "2,128.62"
},
{
"value": "2,661.56"
}
];
const result =
input.slice() // copy the input
.map(({value}) => +value.replace(',', '')) // map the value's to a Number
.reduce((acc, value, i) => {
acc.total += value; // add to the total
let len = acc.five.push(value); // push the current value
if (len > 5) {
acc.total -= acc.five.shift(); // if the length has exceeded 5, reduce the total by the first value, and remove it
}
if (acc.five.length == 5) { // if the length is 5, output an average
acc.result.push(Number((acc.total / 5).toFixed(3)));
}
return acc;
}, {five:[], result:[], total:0})
.result; // we only want the resulting array
console.log(result);