Рассчитать сумму значений массива в Javascript - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь найти общую сумму игрушек в следующем коде.Моя попытка здесь: calcTotal, но она дает только результат NaN.Я использовал тот же код в функции calcTotal прежде, чтобы вычислить сумму значений массива, но по какой-то причине он не будет работать здесь, любая помощь, пожалуйста?Задача программы состоит в том, чтобы пользователь вводил имя собаки и количество игрушек, эта информация помещалась в объект, а затем помещалась в массив.Общее количество игрушек затем должно быть отображено.Заранее спасибо.

    function init() {
    var dogarray = [];
    var dogobject = {};


    var dogname = prompt("Please enter dog name");
    var toyamt = prompt("Please enter toy amount");
    while (dogname != "" && toyamt != "") {
        dogobject.name = dogname;
        dogobject.toys = toyamt;
        dogarray.push(Object.values(dogobject) + "<br />");
        dogname = prompt("Please enter dog name");
        toyamt = prompt("Please enter toys amount");

    calcTotal(dogarray);
}

}

function calcTotal(dogarray) {
    var sum=0;
    var i;

    for(i=0; i<dogarray.length; i++){
        sum = sum + dogarray[i].toys;       
    }

    document.getElementById("msg3").innerHTML = "Total number of toys: " + sum;

}

window.onload = init; 

1 Ответ

0 голосов
/ 12 ноября 2018

Ваш код завершается ошибкой, потому что ваш "dogarray" заполнен значениями типа String, а у строк нет свойства "toy". Это происходит из-за Object.values(dogobject) + "<br />". Object.values возвращает массив строк, который будет приведен к одной строке при объединении с "<br />".

Ниже приведен рабочий код:

function init() {
    var dogarray = [];
    var dogname = prompt("Please enter dog name");
    var toyamt = prompt("Please enter toy amount");
    while (dogname != "" && toyamt != "") {
        dogarray.push({ // just store raw objects
            name: dogname,
            toys: Number(toyamt) // cast to number
        });
        dogname = prompt("Please enter dog name");
        toyamt = prompt("Please enter toys amount");

        calcTotal(dogarray); // maybe move this out of the while loop?
    }
    renderAll(dogarray); // render dog names and toys
}

function renderAll(dogarray) {
    var vHtml = 'Dogs & Toys:<br />';
    var i;

    for (i = 0; i < dogarray.length; i++) {
        vHtml = vHtml + dogarray[i].name + ', ' + dogarray[i].toys + '<br />';
    }

    document.getElementById('msg1').innerHTML = vHtml;
}

function calcTotal(dogarray) {
    var sum=0;
    var i;

    for(i=0; i<dogarray.length; i++){
        sum = sum + dogarray[i].toys;       
    }

    document.getElementById('msg3').innerHTML = "Total number of toys: " + sum;
}

window.onload = init; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...