uint8array javascript的总和

时间:2015-05-15 23:38:30

标签: javascript ecmascript-6 typed-arrays

我试图对数据流求和,然后对其进行平均,这里有一些代码。

var getAverage = function(dataArray){
        var total,
        sample = dataArray.length,
        eArray = Array.prototype.slice.call(dataArray);
        for (var i = 0; i< sample; i++) {
          total+= eArray[i];
        }
        return total;
    }
    var output = function(){
        //source data
        var dataArray = new Uint8Array(bufferLength);
        analyser.getByteTimeDomainData(dataArray);
        var average = getAverage(dataArray);
        $('#average').text(average);
        window.requestAnimationFrame(output);

数组中的每个元素都返回一个数字,但它仍然返回NaN。帮助

2 个答案:

答案 0 :(得分:3)

设置总数= 0;目前它默认为undefined。 undefined +数字= NaN,NaN +数字= NaN。

答案 1 :(得分:1)

声明的变量totalundefined,这意味着当添加数字时,它将创建NaN(非数字)。

此外,Typed Array(ArrayBuffer / views)和Array不一样,将类型化数组转换为普通数组会使迭代速度变慢,因为类型数组是实际的字节缓冲区,而数组是(节点)列表。这取决于转换本身的成本。

只需将它们直接添加即可。请记住将总和除以长度,当然要初始化total

var getAverage = function(dataArray){
    var total = 0,                               // initialize to 0
        i = 0, length = dataArray.length;
    while(i < length) total += dataArray[i++];   // add all
    return length ? total / length : 0;          // divide (when length !== 0)
}