【问题标题】:Calculate sum of array values in Javascript在Javascript中计算数组值的总和
【发布时间】:2018-11-12 09:32:27
【问题描述】:

我试图在以下代码中找到玩具的总和。我的尝试在那里: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; 

【问题讨论】:

  • dogarray 是一个字符串数组 (Object.values(dogobject) + "&lt;br /&gt;"),所以 dogarray[i].toysundefined
  • 谢谢str,我该如何调整代码才能正常工作?
  • 删除+ "&lt;br /&gt;"。还将toyamt(它是一个字符串)转换为一个数字。例如使用dogobject.toys = +toyamt;

标签: javascript arrays object sum


【解决方案1】:

您的代码失败,因为您的“dogarray”填充了 String 类型的值,并且字符串没有“玩具”属性。这是因为Object.values(dogobject) + "&lt;br /&gt;"Object.values 返回一个字符串数组,与"&lt;br /&gt;" 连接时将转换为单个字符串。

下面是一些工作代码:

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; 

【讨论】:

  • 非常感谢,它确实有效。但是,我没有在我的问题中指定,任务的一部分是还显示玩具的名称和数量。 (我没有包括这个,因为它适用于我的旧代码,但是使用你的代码,显示狗和玩具只显示 [object Object] 等。以下是我用来显示信息的代码:var vIndex = 0; var outputdog = ""; for (vIndex = 0; vIndex " + 输出狗;
  • 我已经更新了代码。您所要做的就是将第 2 行的 #output 选择器与您的选择器交换。如果您想在每次添加新狗时显示信息,只需将调用移动到 while 循环内的 renderAll,就在 calcTotal 下方
  • 对不起,是害虫,但是有没有更简单的方法来显示玩具的名称和数量?任何类似于我使用的代码(以前的评论)?只是我还没有真正使用查询选择器和节点以及所有这些......
  • 好的,我将代码更改为与您最初的代码非常相似的代码,唯一的区别是变量名称,我的示例以“Dogs & Toys:”开头,而您的代码稍后将其添加.
猜你喜欢
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多