我试图对数据流求和,然后对其进行平均,这里有一些代码。
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。帮助
答案 0 :(得分:3)
设置总数= 0;目前它默认为undefined。 undefined +数字= NaN,NaN +数字= NaN。
答案 1 :(得分:1)
声明的变量total
为undefined
,这意味着当添加数字时,它将创建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)
}