我有一个不断更新Arduino引脚模拟读数的数组。
我想创建一个函数,它接收数组中最新的100个值,并返回它们的平均值(该数组的最大长度为100,000,它开始'移位'和'推'以腾出空间对于新的价值观。)
我创建了这个函数,但每次都返回'NaN':
function returnAverage(){
var averageArray = [];
var sum = 0;
var sampleEnd = values.length
for (var x = sampleEnd - 100; x < sampleEnd; x++) {
averageArray[x] = values[x]
}
for(var i = 0; i < averageArray.length; i++){
sum += parseInt(averageArray[i]);
}
var avg = sum/averageArray.length;
console.log(avg)
}
有什么想法吗?
答案 0 :(得分:2)
如果值是一个数字数组,则最后平均最多100个项目:
function returnAverage(values) {
var arr = values.slice(-100);
return arr.reduce(function(a, b){ return a + b; }, 0) / (arr.length || 1);
}
答案 1 :(得分:0)
第一个问题是sum和averageArray.lnegth的最终值是0。 这似乎会发生,因为“value”数组是空的。
见下面的例子:
var values = [0,1,2,3,4,5,6];
var averageArray = [];
var sum = 0;
var sampleEnd = values.length
for (var x = sampleEnd - 7; x < sampleEnd; x++) {
averageArray[x] = values[x]
}
for(var i = 0; i < averageArray.length; i++){
sum += parseInt(averageArray[i]);
}
var avg = sum/averageArray.length;
console.log(avg)
编辑:NaN是除以零的结果。所以你可能想在计算之前检查一下:
if(sum == 0 || averageArray.length == 0)
{
return 0;
}