javascript - 函数中的过滤方法以输出平均值
问题描述
我试图过滤给定的数组,只输出一个新数组的平均值。但是,由于某种原因,数组的长度是基于其他数据类型所在的原始数组的长度,尽管我指定长度是基于newArr
数组的。
有人可以帮忙吗?
const bills = [[], 4, 42, 9, "error"];
const calcAverage = function (arr) {
let sum = 0;
let avg;
for (let i = 0; i < arr.length; i++) {
if (typeof arr[i] === "number") {
sum = sum + arr[i];
avg = sum / arr.length
} else {
const newArr = arr.filter(arr => typeof arr[i] === "number");
for (let b = 0; b < newArr.length; b++) {
sum = sum + newArr[b];
avg = sum / newArr.length;
}
}
}
return avg;
}
console.log(calcAverage(bills));
解决方案
你真的不需要.filter
使用for loop
.
相反,您可以保留count
到目前为止遇到的数字数量并使用它来计算您的平均值。如果您遇到不是数字的项目,我们可以跳过它并继续前进。
const bills = [[], 4, 42, 9, 'error'];
const calcAverage = function (arr) {
let sum = 0, avg = 0;
for (let i = 0, count = 0; i < arr.length; i++) {
if (typeof arr[i] === 'number') {
count++;
sum += arr[i];
avg = sum / count;
}
}
return avg;
};
console.log(calcAverage(bills));
推荐阅读
- javascript - 正则表达式:如何匹配不带任何字符但允许空格后的字符的数字?
- javascript - 如何在条码扫描仪中更改后缀(将键输入到其他键,如 ctrl+1)?
- php - 如何在 Laravel 中获取最新的活动记录?
- gitlab - 无法统计文件路径
- java - 合并两个时间序列数据并同步日期时间?
- ios - EXC_BAD_ACCESS KERN_INVALID_ADDRESS Firebase crashlytics 检测到 NSAttributedString 格式化崩溃
- http - 无法使用 Apollo-Client HttpLink 连接到 GraphQL 服务器
- delphi - 如何在 Delphi 中生成 GUID 版本 1?
- java - Intelliji-idea 在网络上找不到 jar
- python - 尝试使用 Django 部署餐厅情感分析模型时遇到问题