计算Javascript中数组值的总和

计算Javascript中数组值的总和,javascript,arrays,object,sum,Javascript,Arrays,Object,Sum,我试图在下面的代码中找到玩具的总数。我的尝试就在这里:calcTotal,但它只提供NaN的结果。我以前在calcTotal函数中使用过相同的代码来计算数组值之和,但无论出于什么原因,它在这里都不起作用,请提供帮助?该程序的任务是让用户输入狗名和玩具数量,这些信息被放入一个对象中,然后放入一个数组中。然后需要显示玩具的总量。先谢谢你 function init() { var dogarray = []; var dogobject = {}; var dog

我试图在下面的代码中找到玩具的总数。我的尝试就在这里: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; 
函数init(){
var dogarray=[];
var dogobject={};
var dogname=提示(“请输入狗名”);
var toyamt=提示(“请输入玩具金额”);
while(dogname!=“”&&toyamt!=“”){
dogobject.name=dogname;
dogobject.toys=toyamt;
dogarray.push(Object.values(dogobject)+“
”); 狗名=提示(“请输入狗名”); toyamt=提示(“请输入玩具金额”); calcTotal(dogarray); } } 函数calcTotal(dogarray){ var总和=0; var i;
对于(i=0;i您的代码失败,因为您的“dogarray”中填充了
String
类型的值,并且字符串没有“toy”属性。这是因为
Object.values(dogobject)+“
对象。value
返回一个字符串数组,当与

以下是一些工作代码:

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; 
函数init(){
var dogarray=[];
var dogname=提示(“请输入狗名”);
var toyamt=提示(“请输入玩具金额”);
while(dogname!=“”&&toyamt!=“”){
push({//只存储原始对象
名字:狗名,
玩具:数字(toyamt)//转换为数字
});
狗名=提示(“请输入狗名”);
toyamt=提示(“请输入玩具金额”);
calcTotal(dogarray);//是否可以将其移出while循环?
}
renderAll(dogarray);//渲染狗名和玩具
}
函数renderAll(dogarray){
var vHtml=‘狗和玩具:
’; var i; 对于(i=0;i; } document.getElementById('msg1')。innerHTML=vHtml; } 函数calcTotal(dogarray){ var总和=0; var i;
因为(i=0;i
dogarray
是一个字符串数组(
Object.values(dogobject)+“
),所以
dogarray[i]。玩具
未定义的
。谢谢str,我如何调整代码使其工作?删除
+“
。还可以将
转换为toyamt
(这是一个字符串)例如,通过使用
dogobject.toys=+toyamt;
非常感谢这一点,它确实有效。但是,我在问题中没有具体说明,这部分任务还包括显示玩具的名称和数量。(我没有包括这个,因为它与我的旧代码一起工作,但是与您的代码一起,显示狗和玩具只是显示[object object]等。下面是我用来显示信息的代码:var-vIndex=0;var-outputdog=“”;for(vIndex=0;vIndex"+outputdog;我已经更新了代码。您所要做的就是将第2行的
#output
选择器与选择器交换。如果您想在每次添加新狗时显示信息,只需将调用移动到
renderal
while
循环,就在
calcTotal
的正下方,很抱歉这是一个害虫,但是有没有easier如何显示玩具的名称和数量?是否与我使用的代码类似(之前的评论)?只是我没有真正使用查询选择器和节点以及所有这些……好吧,我将代码更改为与您最初使用的非常相似的代码,唯一的区别是变量名称,我的示例以“Dogs&Toys:”开头,而您的代码后来又预先添加了它。