JavaScript数组计算平均收益NaN

问题描述

我有一个具有以下格式的数组:

let array = [{length:0},{length:5},{length:10},{length:5}]

let sum = array.filter(x=>x.length).reduce((a,b)=>a.length + b.length,0)

let count = array.filter(x=>x.length).length

console.log(sum,count,sum/count)

我需要过滤> 0的值并基于这些值计算平均值,但是它总是获得sum的NaN,因此得到我需要的平均值。我从这个answer here开始。

感谢您的任何建议。

解决方法

您的问题是如何使用reduce函数。

let array = [
  { length: 0 },{ length: 5 },{ length: 10 },{ length: 5 }
];

let sum = array.filter((x) => x.length).reduce((a,b) => a + b.length,0);
let count = array.filter((x) => x.length).length;
console.log(sum,count,sum / count);

,

您需要存储过滤的项目并通过采用length属性来获得总和。获取NaN的原因是,您需要一个数字并从length获得属性a,但该属性不存在。在使用undefined作为加法值时,您将获得NaN作为总和。

稍后除以过滤后的数组的长度。

let array = [{ length: 0 },{ length: 5 }],items = array.filter(x => x.length),sum = items.reduce((sum,{ length }) => sum + length,0),length = items.length,average = sum / length;

console.log(sum,length,average);

一种通过将对象用于sumcount和单个循环的方法。

let array = [{ length: 0 },{ sum,count } = array.reduce(
        (o,{ length }) => (o.sum += length,o.count += !!length,o),{ sum: 0,count: 0 }
    ),average = sum / count;

console.log(sum,average);

,

尝试一下:

const array = [{ length: 0 },{ length: 5 }];
let count = 0;
let sum = 0;
for (const item of array) {
  if (item.length) {
    sum += item.length;
    count++;
  }
}
console.log(sum / count);