.
, , ( ) .
:
movingAvg(arr, 10) 10 arr.
movingAvg(arr, 20, function(val){ return val != 0; }) 20- arr
, Chart.js, , :
...
,datasets: [
{
label: "Values"
,data: values
}
,{
type: "line"
,label: "20 Point Moving Average"
,data: movingAvg(values, 20, function(val){ return val != 0; })
}
]
...
:
function movingAvg(array, count, qualifier){
var avg = function(array, qualifier){
var sum = 0, count = 0, val;
for (var i in array){
val = array[i];
if (!qualifier || qualifier(val)){
sum += val;
count++;
}
}
return sum / count;
};
var result = [], val;
for (var i=0; i < count-1; i++)
result.push(null);
for (var i=0, len=array.length - count; i <= len; i++){
val = avg(array.slice(i, i + count), qualifier);
if (isNaN(val))
result.push(null);
else
result.push(val);
}
return result;
}