[英]Javascript sum of arrays and average
我在获取两个数组的总和并四舍五入时合并它们的平均值时遇到问题。
我不想硬编码,而是传递两个随机数组。
所以这是代码,但它不断返回NaN
function sumAverage(arr) { var result = 0; // Your code here // set an array arr = []; a = []; b = []; arr[0] = a; arr[1] = b; var sum = 0; // compute sum of elements in the array for (var j = 0; j < a.length; j++) { sum += a[j]; } // get the average of elements in the array var total = 0; total += sum / a.length; var add = 0; for (var i = 0; i < b.length; i++) add += b[i]; var math = 0; math += add / b.length; result += math + total; Math.round(result); return result; } console.log(sumAverage([ [2, 3, 4, 5], [6, 7, 8, 9] ]));
如果您想在功能上做得更多,可以执行以下操作:
function sumAverage(arrays) { const average = arrays.reduce((acc, arr) => { const total = arr.reduce((total, num) => total += num, 0); return acc += total / arr.length; }, 0); return Math.round(average); } console.log('sum average:', sumAverage([[1,2,3], [4,5,6]]));
只是尝试这种方法..这种问题有时发生在我身上。
例如
var total = 0;
total = total + sum / a.length;
每个concat都使用此方法。
基本上,我在这里看到一个错误: arr[0] = a; arr[1] = b;
arr[0] = a; arr[1] = b;
那应该是a= arr[0]; b= arr[1];
a= arr[0]; b= arr[1];
然后删除: arr = [];
我建议您这样编写函数:
function sum(arr) {
var arr1 = arr[0]
var sum1 = 0;
arr1.map(function(e){sum1+=e});
var arr2 = arr[1]
var sum2 = 0;
arr2.map(function(e){sum2+=e});
return Math.round(sum1/arr1.length + sum2/arr2.length);
}
因为您要为值[]分配与参数相同的名称? 这有效,请参阅jFiddle
function sumAverage(arr) {
var result = 0;
//arr = [];
//a = [];
//b = [];
a = arr[0];
b = arr[1];
var sum = 0;
// compute sum of elements in the array
for(var j = 0; j < a.length; j++ ){
sum += a[j] ;
}
// get the average of elements in the array
var total = 0;
total += sum / a.length;
var add = 0;
for(var i = 0; i < b.length; i++)
add += b[i];
var math = 0;
math += add / b.length;
result += math + total;
Math.round(result);
return result;
}
document.write(sumAverage([[2,3,4,5], [6,7,8,9]]));
问题是您通过说arr = []
来清空arr。
稍后,您还要遍历也是空的a
。 同样,当你说total += sum / a.length;
,sum为0,a.length为0,因此0/0变为NaN。 math
。 将Nan添加到NaN再次是NaN,这就是您得到的。
解决方案是不清空传递的arr并按如下所示修改您的代码:
function sumAverage(arr) { var result = 0; // Your code here // set an array //arr = []; //a = []; //b = []; a = arr[0]; b = arr[1]; var sum = 0; // compute sum of elements in the array for (var j = 0; j < a.length; j++) { sum += a[j]; } // get the average of elements in the array var total = 0; total = sum / a.length; var add = 0; for (var i = 0; i < b.length; i++) add += b[i]; var math = 0; math = add / b.length; result = math + total; result = Math.round(result); return result; } console.log(sumAverage([ [2, 3, 4, 5], [6, 7, 8, 9] ]));
如评论中所述,您重置了论点...
将变量“参数”用于动态功能参数。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments
我建议使用两个嵌套循环,一个用于外部数组,一个用于内部数组。 然后将值求和,计算平均值并添加平均值。
function sumAverage(array) { var result = 0, sum, i, j; for (i = 0; i < array.length; i++) { sum = 0; for (j = 0; j < array[i].length; j++) { sum += array[i][j]; } result += Math.round(sum / array[i].length); } return result; } console.log(sumAverage([[2, 3, 4, 5], [6, 7, 8, 9]])); // 12
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.