简体   繁体   English

Javascript:计算最小/最大/平均值

[英]Javascript: Calculating Min/Max/Average

I wrote this code in my html site, in Javascript, but is not working right. 我在Java站点的html站点中编写了此代码,但工作不正常。 Most times it seems to ignore some entries and just randomly selects which is the min/max value. 大多数情况下,它似乎忽略了一些条目,只是随机选择最小/最大值。 Also, when I tried to calculate average values, I got a string instead of a number, even though the variable is declared as 0 in the beginning. 另外,当我尝试计算平均值时,即使变量在开始时声明为0,我还是得到了一个字符串而不是一个数字。 eg performing 0+1+1+2+3+5 = 011235 instead of 12. Here is the code, thanks in advance. 例如,执行0 + 1 + 1 + 2 + 3 + 5 = 011235而不是12。这是代码,在此先感谢。

**EDIT: I added the student average code in the end, but it doesn't work, it doesn't show any results on the page, not even the "student" + [i] part. **编辑:我在最后添加了学生平均代码,但是它不起作用,它在页面上甚至“学生” + [i]部分都没有显示任何结果。 On the other hand, the parseInt() command worked, and made everything work as it should, thank you :) 另一方面,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>

The value of an input is a string, thus a + b will be interpreted as appending one string to another. 输入的值是一个字符串,因此a + b将被解释为将一个字符串附加到另一个字符串。

If you make sure the first parameter (a in this case) is an integer a + b will result in the two being mathematically adding the two 如果确保第一个参数(在这种情况下为a)是整数,则a + b将导致两个参数在数学上相加

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

JSFiddle JSFiddle

Ok for a start you seem very confused about document.getElementById 首先,您似乎对document.getElementById感到非常困惑

This does not address a javascript variable at all...... 这根本无法解决javascript变量......

This literally "gets the document element by its id". 这实际上是“通过其ID获取文档元素”。 Here is an example of how to use it... 这是一个使用方法的例子...

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

This would simply pop up an alert with the text that describes the src of the document object who's id is 'my_new_selfie' that is.... 这将简单地弹出一个警报,其中包含描述id为'my_new_selfie'的文档对象的src的文本。

[me.txt] [me.txt]

The reason that document.getElementById was introduced to javascript was to save developers learning the DOM (document object model) in order to access objects. 将document.getElementById引入javascript的原因是为了节省开发人员学习DOM(文档对象模型)的权限,以便访问对象。 It allows you to simply give you object an id and change things about it using the id 它允许您简单地给您一个对象id并使用该id对其进行更改

In the above example I could use a script or button to change the image source an example of this might be using the onclick event of another object on the page like a button... 在上面的示例中,我可以使用脚本或按钮来更改图像源,例如,可以使用页面上另一个对象的onclick事件,例如按钮...

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

It is not used to identify variables in a javascript 它不用于标识javascript中的变量

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM