为了账号安全,请及时绑定邮箱和手机立即绑定

如何对求出给定数组中的平均成绩,并打印出最高成绩的人和成绩

/ 猿问

如何对求出给定数组中的平均成绩,并打印出最高成绩的人和成绩

慕标6419154 2017-06-20 22:18:49

var scoreStr = "小2明:87;小花:81;小红:97;小1:76;小99:74;小2:94;小西:90;小伍:76;小迪:64;小曼:76";

var score=eval(("[{"+scoreStr+"}]").replace(/;/g,"},{"));

//希望寻着这个思路往下,希望不要用到显示循环

查看完整描述

3 回答

已采纳
?
李晓健
var scoreStr = "小2明:87;小花:81;小红:97;小1:76;小99:74;小2:94;小西:90;小伍:76;小迪:64;小曼:76";
//将字符串组装成数组
var scoreArr = scoreStr.split(';');
//对数组进行排序  将最高分排到最前面
scoreArr.sort(function (user,user2) {
    var score = parseInt(user.split(':')[1]);
    var score2 = parseInt(user2.split(':')[1]);
    return score2 - score;
});
//对分数求和
var totalScore = scoreArr.reduce(function (total,user) {
    var score  = parseInt(user.split(':')[1]);
    return total+score;
},0)
//取出分数最高的人的信息
var maxUserArr  = scoreArr[0].split(':');
alert('平均成绩是:'+totalScore/scoreArr.length+' ;最高分数的人是'+maxUserArr[0]+',他的分数是:'+maxUserArr[1]);

你这个不让用循环的要求有点过了,希望这样你能看懂


如果解决了你的问题,请记得采纳

查看完整回答
13 反对 2017-06-21
?
maoruibin

var scoreStr = "小2明:87;小花:81;小红:97;小1:76;小99:74;小2:94;小西:90;小伍:76;小迪:64;小曼:76";

var tostring = Object.prototype.toString;
Object.prototype.toString = function() {
   return Number(this.value);
};
scoreStr = scoreStr.replace(/:/g,'",value:').replace(/;/g,'},{name:"');
var score=eval(("[{name:\""+scoreStr+"}]"));

score.sort(function(v1, v2) {
   return (v1 - v2);
});

var max = score[score.length - 1];

var reducer = function add(sumSoFar, item) { return sumSoFar + item; };

// do the job
var total = score.reduce(reducer, 0);
var avg = total / score.length;
console.log(total);

Object.prototype.toString = tostring;


console.log(max.name);//最高成绩
console.log(avg);//平均分



建议你可以去看下我geithub上的项目:https://github.com/maoruibin001/Black-Technology 里面有详细的单元测试。

查看完整回答
2 反对 2017-06-21
点击展开后面1
?
落叶1111

你的eval写法是错的,还有不用到循环只有一种解决方法了,那就是js自带的和循环有关的东西,比如sort排序之类呢,建议自己研究,

查看完整回答
反对 2017-08-31

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信