Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算平均值:“;TypeError:减少没有初始值的空数组;_Javascript_Arrays_Object_Average - Fatal编程技术网

Javascript 计算平均值:“;TypeError:减少没有初始值的空数组;

Javascript 计算平均值:“;TypeError:减少没有初始值的空数组;,javascript,arrays,object,average,Javascript,Arrays,Object,Average,这是我的函数,用于计算包含对象的数组的平均值。 但是如果myData是空的(没有对象),我有“TypeError:减少没有初始值的空数组” 问题可能是您的objectServices2中没有如下元素: let objectServices2 = []; 如果该值来自某些服务,您可能需要检查它为什么为空 另一个修复程序可以提供如下所示的默认值 var average = objectServices2.reduce(function(a, b, index, self) { var key

这是我的函数,用于计算包含对象的数组的平均值。 但是如果myData是空的(没有对象),我有“TypeError:减少没有初始值的空数组”


问题可能是您的
objectServices2
中没有如下元素:

let objectServices2 = [];
如果该值来自某些服务,您可能需要检查它为什么为空

另一个修复程序可以提供如下所示的默认值

var average = objectServices2.reduce(function(a, b, index, self) {

  var keys = Object.keys(a) ;
  var c = {};


  keys.map(function(key) {
    c[key] = a[key] + b[key] |0 ;

    if (index + 1 === self.length ) {
      c[key] = c[key] / self.length ;
    }
  });

   return c ;
 },123);//  <=====here
var average=objectServices2.reduce(函数(a、b、index、self){
var keys=对象。keys(a);
var c={};
键。映射(功能(键){
c[键]=a[键]+b[键]| 0;
如果(索引+1==self.length){
c[key]=c[key]/self.length;
}
});
返回c;

},123);// 您的问题是缺少reduce函数的初始值

根据mdn:

reduce()方法对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值

该累加器是函数先前执行的值,但对于数组的第一个值,必须提供初始值

如果reduce函数的输出是一个对象,则可能需要使用空对象
{}
初始化函数。如果它是一个数字,可能是
0
,如果您想返回一个字符串,那么一个合理的开始值可能是一个空字符串:
'
。这完全取决于你在计算什么


一个更简单的替代方法是循环数组中对象的每个项并计算平均值:

var myData = [{"fruit1": 2,"fruit2": 2,"fruit3": 1},{"fruit1": 2,"fruit2": 1,"fruit3": 1}];

var { average } = myData.reduce((all, item) => {

    Object.keys(item).forEach(k => {
        all.count++;
        all.sum += item[k];
        all.average = all.sum / all.count;
    });

    return all;

}, {average: 0, count: 0, sum: 0});

console.log(average);
或者,在计算项目总数和总和后,进行<代码>平均值计算:

var myData = [{"fruit1": 2,"fruit2": 2,"fruit3": 1},{"fruit1": 2,"fruit2": 1,"fruit3": 1}];

var { count, sum } = myData.reduce((all, item) => {

    Object.keys(item).forEach(k => {
        all.count++;
        all.sum += item[k];
    });

    return all;

}, {count: 0, sum: 0});

var average = sum / count;

console.log(average);

因此,请提供初始值,或者检查数组是否为空。您希望默认平均值是多少?
var myData = [{"fruit1": 2,"fruit2": 2,"fruit3": 1},{"fruit1": 2,"fruit2": 1,"fruit3": 1}];

var { average } = myData.reduce((all, item) => {

    Object.keys(item).forEach(k => {
        all.count++;
        all.sum += item[k];
        all.average = all.sum / all.count;
    });

    return all;

}, {average: 0, count: 0, sum: 0});

console.log(average);
var myData = [{"fruit1": 2,"fruit2": 2,"fruit3": 1},{"fruit1": 2,"fruit2": 1,"fruit3": 1}];

var { count, sum } = myData.reduce((all, item) => {

    Object.keys(item).forEach(k => {
        all.count++;
        all.sum += item[k];
    });

    return all;

}, {count: 0, sum: 0});

var average = sum / count;

console.log(average);