Javascript 计算平均值:“;TypeError:减少没有初始值的空数组;
这是我的函数,用于计算包含对象的数组的平均值。 但是如果myData是空的(没有对象),我有“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
问题可能是您的
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);