Ошибка установки значения объекта [JavaScript]

Я построил калькулятор стандартных отклонений, который работает, как и ожидалось, используя объекты. Однако теперь я хочу установить свойство newScore в каждом объекте к объектам z балл ( (оценка - среднее) / стандартное отклонение).

Тем не менее, похоже, что каждый объект получает одинаковую оценку z, и я не уверен, почему.

Что я делаю неправильно?

Скрипка здесь

HTML:

<input type="text" id="name" placeholder="Name">
<input type="text" id="score" placeholder="Score">
<br>
<br>
<button id="push">Push to Array</button>
<button id="show">Show</button>
<button id="doMath">Do Math</button>
<ul id="list"></ul>
<p id="sum"></p>
<p id="mean"></p>
<p id="variance"></p>
<p id="std"></p>

CSS:

input:hover {
    border: 1px solid black;
}

JavaScript:

var myArray = [];
var sumOfScores;
var mean;
var variance;
var secondArray = [];
var thirdArray = [];
var squaredSum;
var std;
$(document).ready(function () {
    $('#push').on('click', function () {
        var name = $('#name').val();
        var score = parseInt($('#score').val());
        myArray.push((student = {
            name: name,
            score: score,
            newScore: null
        }));
        console.log(student);
        $('#name').val("");
        $('#score').val("");
    });
    $('#show').on('click', function () {
        $('#list').html("");
        for (i = 0; i < myArray.length; i++) {
            $('#list').append("<li>" + myArray[i].name + " received a score of " + myArray[i].score + "</li>");
        };
    });
    $('#doMath').on('click', function () {
        sumOfScores = 0;
        for (i = 0; i < myArray.length; i++) {
            sumOfScores += myArray[i].score;
        };
        $('#sum').html("The sum is: " + sumOfScores);
        mean = (sumOfScores / myArray.length);
        $('#mean').html("The mean score is: " + mean);
        variance = 0;
        for (i = 0; i < myArray.length; i++) {
            console.log(myArray[i].score);
            secondArray.push(myArray[i].score - mean);
        };
        console.log(mean);
        console.log("The second array is: " + secondArray);
        for (i = 0; i < secondArray.length; i++) {
            thirdArray.push(Math.pow(secondArray[i], 2));
        };
        console.log("The third array is: " + thirdArray);
        squaredSum = 0;
        for (i = 0; i < thirdArray.length; i++) {
            squaredSum += thirdArray[i];
        };
        console.log("The squared sum is: " + squaredSum);
        variance = 0;
        variance = (squaredSum / ((thirdArray.length) - 1));
        console.log("The variance is: " + variance);
        $('#variance').html("The variance is: " + variance);
        std = Math.sqrt(variance);
        $('#std').html("The standard deviation is: " + std);
        console.log("The standard deviation is: " + std);
        //figure out z score
        for (i = 0; i < myArray.length; i++) {
            myArray[i].newScore = ((myArray[i].newScore - mean) / std);
        };
        for (i = 0; i < myArray.length; i++) {
            console.log(myArray[i].newScore);
        };
    });
});

1 ответ

Решение

Согласно Абхиталксу, строка 61 должна была выглядеть так:

myArray[i].newScore = ((myArray[i].score - mean) / std);

тогда как у меня было:

myArray[i].newScore = ((myArray[i].newScore - mean) / std);

который не будет работать, потому что newScore не является значением для этого вычисления и было установлено в ноль, на который вы не можете умножить.

Другие вопросы по тегам