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