根据所有学生成绩的报告,返回班级平均成绩和每个学生的平均成绩。
参数: " Tom 91 85 115 100 99 \ nTim 98 111 98 91 95 \ nThomas 100 98 97 94 99"
输出 {&#34; all&#34;:98.06,&#34; Tom&#34;:98,&#34; Tim&#34;:98.6,&#34; Thomas&#34;:97.6} < / p>
我无法将字符串中的字符和数字分开。我需要动态地吐出所有学生的总平均值,并以对象形式自己平均每个学生的平均值(参见上面的粗体)。因此,如果有任何活动,它将适用于10或2名学生。以下是我的代码
function gradeCalulator (grades) {
var arrayReport = report.split("\n");
var i, j, results = {}; var array = [];
var alpha = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numbers = "0123456789"
for(i = 0; i < arrayReport.length; i++){
for(j = 0; j < arrayReport[i].length; j++){
if(alpha.indexOf(arrayReport[i][j]) > 0 ){
results[arrayReport[i][j]] = arrayReport[i][j]
} else if(numbers.indexOf(arrayReport[i][j]) > 0){
results[arrayReport[i][j]] = arrayReport[i][j]
}
}
}
return results
}
gradeCalulator("Tom 91 85 115 100 99\nTim 98 111 98 91 95\nThomas 100 98 97 94 99");
答案 0 :(得分:0)
这样做可以解决你的问题
function gradeCalulator (reports)
{
var students = grades.split('\n');
var avg= {};
var classsum = 0;
for(var i in students)
{
var grades = students[i].split(' ');
var sumgrade = 0;
for(var j = 1; j < grades.length; j++) sumgrade+= parseInt(grades[j]);
avg[grades[0]] = sumgrade / (grades.length - 1);
classsum += avg[grades[0]];
}
avg.all = classsum / (students.length+1)
return avg;
}
gradeCalulator("Tom 91 85 115 100 99\nTim 98 111 98 91 95\nThomas 100 98 97 94 99");
答案 1 :(得分:0)
试一试:
var report = "Tom 91 85 115 100 99\nTim 98 111 98 91 95\nThomas 100 98 97 94 99";
var a = report.split('\n');
var result = {};
var sum = 0;
var st;
a.forEach(function(e) {
st = e.split(' ');
var name = st.shift();
var s = 0;
st.forEach(e => s += +e);
sum += s;
result[name] = s / st.length;
});
result.all = +(sum / a.length / st.length).toFixed(2);
document.write(JSON.stringify(result));
&#13;
答案 2 :(得分:0)
使用String.split
,Array.foreach
,Array.reduce
和Array.slice
函数的解决方案:
function gradeCalulator(grades) {
var arrayReport = grades.split("\n"), result = {}, items, allAvg = 0;
arrayReport.forEach(function(v){
items = v.split(' ');
result[items[0]] = (items.slice(1).reduce(function(a,b){ return parseInt(a) + parseInt(b); }))/(items.length - 1);
allAvg += result[items[0]];
});
result['all'] = parseFloat((allAvg/Object.keys(result).length).toFixed(2));
return result;
}
var result = gradeCalulator("Tom 91 85 115 100 99\nTim 98 111 98 91 95\nThomas 100 98 97 94 99");
console.log(result);
// Object {Tom: 98, Tim: 98.6, Thomas: 97.6, all: 98.07}
答案 3 :(得分:0)
使用reduce
。
var list = str.split('\n');
var sumInts = function (a, b) { return +a + +b; }
var toTwoDecimal = function (num) {
return +parseFloat(Math.round(num * 100) / 100).toFixed(2);
}
function getGrades(arr) {
var all = 0;
var people = arr.reduce(function (p, c) {
var person = c.split(' ');
var nums = person.slice(1);
var sum = nums.reduce(sumInts) / nums.length;
p[person[0]] = sum;
all += sum;
return p;
}, {});
people.all = toTwoDecimal(all / arr.length);
return people;
}
getGrades(list); // { Tom: 98, Tim: 98.6, Thomas: 97.6, all: 98.07 }