问题描述
对不起,如果我写得不好,这是我的第一篇文章。我有一项任务有问题。
我有一个班级考试,我想知道该班级的平均成绩。编写一个函数,该函数采用包含给定测试的所有成绩/分数的哈希数组,并返回整个班级的平均成绩。输入为 JSON
function my_average_mark(param_1) {
let total = 0
let result = 0;
for (const key of param_1) {
if (param_1.length > 0){
total += (key['integer'])
result=(total/param_1.length)
}
}
return result.toFixed(1)
};
这些检查成功
1)
Input: [
{"string": "John","integer": 7},{"string": "Margot","integer": 8},{"string": "Jules","integer": 4},{"string": "marco","integer": 19}
]
Output: 9.5
- 输入:[] 输出:0.0
但是我遇到了这个问题 Input: {}
- 我得到了 TypeError: param_1 is not iterable
解决方法
将所有的integer
值相加,循环完成后,除以数组的长度:
function my_average_mark(param_1) {
let total = 0;
if(!param_1.length) return 0;
for (const obj of param_1) {
total += obj.integer;
}
return total / param_1.length;
}
const Input = [{"string":"John","integer":7},{"string":"Margot","integer":8},{"string":"Jules","integer":4},{"string":"Marco","integer":19}]
const result = my_average_mark(Input);
console.log(result);
更优雅和简洁的方法是使用 .reduce
来聚合总分。之后,将其分成总学生,如下所示。
var my_average_mark = (data) => {
if(!Array.isArray(data) || data.length === 0)
return 0;
var totalMark = data.reduce((acc,curr) => {
acc += curr["integer"];
return acc;
},0)
return totalMark/data.length;
}
var data = [{"string": "John","integer": 7},{"string": "Margot","integer": 8},{"string": "Jules","integer": 4},{"string": "Marco","integer": 19}];
console.log(my_average_mark(data));
console.log(my_average_mark([]));
console.log(my_average_mark({}));
注意:
-
你的样本数据很奇怪,应该是
{name: "John",mark: 7}
而不是{"string": "John","integer": 7}
-
如果输入是
[]
或{}
,你应该检查输入的类型,如``if(!Array.isArray(data) || data.length === 0) return 0;
- 问题 -> 每次进行新迭代时,循环都试图获得新结果
- 解决方案 -> 将结果计算保持在循环之外