嘿,解析字符串到字符和字符串到数字

Hey parsing in string to character and string to number

本文关键字:字符串 数字 字符      更新时间:2023-09-26

给定所有学生成绩的报告,返回班级平均数和每个学生的平均值。

论点:"Tom 91 85 115 100 99'Tim 98 111 98 91 95'Thomas 100 98 97 94 99"

输出{ "全部": 98.06 , "汤姆": 98, "蒂姆": 98.6, "托马斯": 97.6 }

我在将字符串中的字符和数字分开时遇到问题。我需要以对象形式动态吐出所有学生的总平均值,以及每个学生的总平均值(见上面的粗体)。因此,如果有任何活动,它将与 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");

这样做可以解决您的问题

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");

试试看:

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));

具有 String.splitArray.foreachArray.reduceArray.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}

使用 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 }

演示