嘿,解析字符串到字符和字符串到数字
Hey parsing in string to character and string to number
给定所有学生成绩的报告,返回班级平均数和每个学生的平均值。
论点:"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.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}
使用 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 }
演示
相关文章:
- Javascript逻辑运算符和字符串/数字
- Javascript排序字符串或数字
- 制作一个regex来验证只有一个数字的字符串
- 将数字转换为字符串数字
- 将HTML(支持文件)中的令牌(字符串、数字等)传递给LogiXML
- 如何从字符串中删除除字母、数字、空格、感叹号和问号之外的所有内容
- 如何替换JavaScript字符串中除字母和数字之外的所有内容(空格/符号)
- 从JS中的字符串中读取数字的库
- 字符串数字-从123456转换为123456
- JavaScript如何面对字符串数字工作
- 将字符串数字的格式设置为货币
- Javascript:如何检索*字符串*数字的小数位数
- 试图理解无法在JavaScript中改变字符串/数字的概念
- Javascript没有使用parseInt函数添加两个字符串数字
- 在jQuery中将整数格式化为字符串数字
- Regex格式字符串数字与逗号和2个小数在javascript
- 如何使用javascript排序字符串数字
- 转换'字符串数字'到一个数字
- 检查字符串/数字类型的字段是否为空
- JavaScript:将字符串/数字转换为数字或null,0返回0