Javascript数组和平均值之和

时间:2017-06-07 13:21:15

标签: javascript

我有一个问题就是得到两个数组的总和并在四舍五入时合并它们的平均值。

我不想硬编码,而是传递两个随机数组。
所以这里是代码,但它不断返回 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]
]));

7 个答案:

答案 0 :(得分:2)

如果你想在功能上做得更多,你可以这样做:

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]]));

答案 1 :(得分:0)

试试这种方法。这种问题有时会发生在我身上。

例如

 var total = 0;
 total = total + sum / a.length;

每个concat都使用这种方法..

答案 2 :(得分:0)

基本上我在这里看到一个错误:      arr[0] = a; arr[1] = b;

那应该是     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);
}

答案 3 :(得分:0)

因为您要赋值[]与参数同名?这有效,请参阅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]]));

答案 4 :(得分:0)

问题在于你通过说arr = []来清空arr。

稍后,您正在迭代a,这也是空的。 再次说total += sum / a.length;时,sum为0,a.length为0,因此0/0变为NaN。同样适用于math。向NaN添加Nan也是NaN,这就是你得到的。

解决方法是不要清空传递的arr并修改你的代码,如下所示:

&#13;
&#13;
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]
]));
&#13;
&#13;
&#13;

答案 5 :(得分:0)

正如评论中所述,你重置了你的论点......

使用变量&#34;参数&#34;用于动态函数参数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments

答案 6 :(得分:0)

我建议使用两个嵌套循环,一个用于外部数组,另一个用于内部数组。然后求和值,计算平均值并加上平均值。

&#13;
&#13;
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
&#13;
&#13;
&#13;