JavaScript 数组计算平均值 returns NaN

JavaScript Array calculate average returns NaN

我有一个格式如下的数组:

let array = [{length:0},{length:5},{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.

感谢任何建议。

试试这个:

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

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

let array = [
  { length: 0 },
  { length: 5 },
  { 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的原因,你拿一个数字,从a得到属性length,这是不存在的。在使用 undefined 作为添加值时,您会得到 NaN 作为总和。

稍后除以 filterd 数组的长度。

let array = [{ length: 0 }, { length: 5 }, { length: 5 }, { length: 10 }, { 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 }, { length: 5 }, { length: 5 }, { length: 10 }, { length: 5 }],
    { sum, count } = array.reduce(
        (o, { length }) => (o.sum += length, o.count += !!length, o),
        { sum: 0, count: 0 }
    ),
    average = sum / count;

console.log(sum, count, average);