【问题标题】:JavaScript Array calculate average returns NaN [closed]JavaScript数组计算平均回报NaN [关闭]
【发布时间】:2020-12-12 02:33:50
【问题描述】:
我有一个这种格式的数组:
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开始的。
感谢您的任何建议。
【问题讨论】:
标签:
javascript
arrays
filter
reduce
【解决方案1】:
您需要存储过滤后的项目并通过获取length 属性来获取总和。得到NaN的原因,你取一个数字,从a得到属性length,它并不存在。在使用 undefined 作为相加值时,您会得到 NaN 作为总和。
稍后除以过滤后数组的长度。
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);
使用sum 和count 的对象和单个循环的方法。
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);
【解决方案2】:
你的问题是你如何使用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);
【解决方案3】:
试试这个:
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);