【问题标题】:Javascript: Calculating Min/Max/AverageJavascript:计算最小值/最大值/平均值
【发布时间】:2016-11-04 18:27:50
【问题描述】:

我在我的 html 网站中用 Javascript 编写了这段代码,但无法正常工作。大多数时候,它似乎忽略了一些条目,只是随机选择最小值/最大值。此外,当我尝试计算平均值时,我得到的是一个字符串而不是一个数字,即使变量在开始时被声明为 0。例如执行 0+1+1+2+3+5 = 011235 而不是 12。 这是代码,在此先感谢。

**编辑:我最后添加了学生平均代码,但它不起作用,它没有在页面上显示任何结果,甚至没有“学生”+ [i] 部分。另一方面,parseInt() 命令起作用了,并且使一切正常工作,谢谢:)

<script language = "javascript">
function myFunction() {
var course0 = [];
var course1 = [];
var course2 = [];

var minstugrade = 100;
var maxstugrade = 0;
var minstugradetext = "";
var maxstugradetext = "";

var stuavgarr = [];
var minstuavg = 100;
var maxstuavg = 0;
var minstuavgtext = "";
var maxstuavgtext = "";

var mincougrade = 100;
var maxcougrade = 0;
var mincougradetext = "";
var maxcougradetext = "";

var mincouavg = 100;
var maxcouavg = 0;
var mincouavgtext = "";
var maxcouavgtext = "";
var couavg = 0;

//add form items to array
var x = document.getElementById("course0");
var i;
    for (i = 0; i < x.length ;i++) {
        course0.push(parseInt(x.elements[i].value));
    }   
var x = document.getElementById("course1");
var i;
    for (i = 0; i < x.length ;i++) {
        course1.push(parseInt(x.elements[i].value));
    }
var x = document.getElementById("course2");
var i;
    for (i = 0; i < x.length ;i++) {
        course2.push(parseInt(x.elements[i].value));
    }

    //calculate course & student min/max
    for (i = 0; i < course0.length; i++) {
    if (course0[i] < mincougrade) {
    mincougrade = course0[i];
    mincougradetext = "course0";
    }
    if (course0[i] > maxcougrade) {
    maxcougrade = course0[i];
    maxcougradetext = "course0";
    }
    if (course0[i] < minstugrade) {
    minstugrade = course0[i];
    minstugradetext = "student" + [i];
    }
    if (course0[i] > maxstugrade) {
    maxstugrade = course0[i];
    maxstugradetext = "student" + [i];
    }
    }   

    for (i = 0; i < course1.length; i++) {
    if (course1[i] < mincougrade) {
    mincougrade = course1[i];
    mincougradetext = "course1";
    }
    if (course1[i] > maxcougrade) {
    maxcougrade = course1[i];
    maxcougradetext = "course1";
    }
    if (course1[i] < minstugrade) {
    minstugrade = course1[i];
    minstugradetext = "student" + [i];
    }
    if (course1[i] > maxstugrade) {
    maxstugrade = course1[i];
    maxstugradetext = "student" + [i];
    }
    }

    for (i = 0; i < course2.length; i++) {
    if (course2[i] < mincougrade) {
    mincougrade = course2[i];
    mincougradetext = "course2";
    }
    if (course2[i] > maxcougrade) {
    maxcougrade = course2[i];
    maxcougradetext = "course2";
    }
    if (course2[i] < minstugrade) {
    minstugrade = course2[i];
    minstugradetext = "student" + [i];
    }
    if (course2[i] > maxstugrade) {
    maxstugrade = course2[i];
    maxstugradetext = "student" + [i];
    }
    }       

    //calculate course average
    for (i = 0; i < course0.length; i++) {
    couavg += course0[i];
    }
    couavg = couavg / course0.length
    if (couavg < mincouavg) {
    mincouavg = couavg;
    mincouavgtext = "course0";
    }
    if (couavg > maxcouavg) {
    maxcouavg = couavg;
    maxcouavgtext = "course0";
    }

    couavg = 0;
    for (i = 0; i < course1.length; i++) {
    couavg += course1[i];
    }
    couavg = couavg / course1.length
    if (couavg < mincouavg) {
    mincouavg = couavg;
    mincouavgtext = "course1";
    }
    if (couavg > maxcouavg) {
    maxcouavg = couavg;
    maxcouavgtext = "course1";
    }

    couavg = 0;
    for (i = 0; i < course2.length; i++) {
    couavg += course2[i];
    }
    couavg = couavg / course2.length
    if (couavg < mincouavg) {
    mincouavg = couavg;
    mincouavgtext = "course2";
    }
    if (couavg > maxcouavg) {
    maxcouavg = couavg;
    maxcouavgtext = "course2";
    }

    //calculate student average
    for (i = 0; i < course0.length; i++) {
    stuavgarr[i] += course0[i];
    stuavgarr[i] += course1[i];
    stuavgarr[i] += course2[i];
    }

    for (i=0; i < stuavgarr.length; i++) {
    stuavgarr[i] = stuavgarr[i] / course0.length;
    if (stuavgarr[i] < minstuavg) {
    minstuavg = stuavgarr[i];
    minstuavgtext = "student" + [i];
    }
    if (stuavgarr[i] > maxstuavg) {
    maxstuavg = stuavgarr[i];
    maxstuavgtext = "student" + [i];
    }
    }


    document.getElementById("studmaxgrade").innerHTML = "Student that achieved the max grade is " + maxstugradetext
    document.getElementById("studmingrade").innerHTML = "Student that achieved the min grade is " + minstugradetext
    document.getElementById("studmaxavg").innerHTML = "Student that achieved the max average is " + maxstuavgtext
    document.getElementById("studminavg").innerHTML = "Student that achieved the min average is " + minstuavgtext
    document.getElementById("courmaxgrade").innerHTML = "The course in which the max grade is scored is " + maxcougradetext
    document.getElementById("courmingrade").innerHTML = "The course in which the min grade is scored is " + mincougradetext
    document.getElementById("courmaxavg").innerHTML = "The course in which the max average grade is scored is " + maxcouavgtext
    document.getElementById("courminavg").innerHTML = "The course in which the min average grade is scored is " + mincouavgtext

    }
</script>

【问题讨论】:

  • 使用parseFloat 将字符串转换为数字。
  • 输入的value总是给你一个字符串。即使变量被定义为 Number,您现在也将其重新分配给... String。

标签: javascript arrays max average min


【解决方案1】:

好吧,你似乎很困惑 document.getElementById

这根本不涉及 javascript 变量......

这实际上是“通过其 id 获取文档元素”。 这是一个如何使用它的示例...

<html>
<img id='my_new_selfie' src='me.jpg'>
....
....
<script>
alert (document.getElementById('my_new_selfie').src)
</script>

这只会弹出一个警报,其中包含描述 id 为“my_new_selfie”的文档对象 那就是……

[me.txt]

将 document.getElementById 引入 javascript 的原因是为了节省开发人员学习 DOM(文档对象模型)以便访问对象的时间。 它允许你简单地给你的对象一个 id 并使用 id 改变它的东西

在上面的示例中,我可以使用脚本或按钮来更改图像源 这方面的一个示例可能是使用页面上另一个对象的 onclick 事件,例如按钮...

onclick='document.getElementById('my_new_selfie').src='new_pic_of_me.JPG'

它不用于识别 javascript 中的变量

【讨论】:

  • 我使用 document.getElementById 来捕获表单,而不是变量。你在这里看不到表格,因为它是用一般的 html 编码的,而不是 javascript 部分..
【解决方案2】:

输入的值是一个字符串,因此 a + b 将被解释为将一个字符串附加到另一个字符串。

如果您确保第一个参数(在本例中为 a)是整数,a + b 将导致两者在数学上相加

console.log( '0' + 1 + 2 + 3 + 4 );             //* outputs 01234
console.log( parseInt( 0 ) + 1 + 2 + 3 + 4 );   //* outputs 10

JSFiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2014-11-20
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多