在数组中查找100个最新值的值

时间:2014-02-06 16:59:20

标签: javascript

我有一个不断更新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)

}

有什么想法吗?

2 个答案:

答案 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;
}