我有以下Javascript。我试图使用'for in;来计算myCosts数组值的总和;循环,然后在页面上显示它们。我想我快到了。
function enterFood()
{
var myFoods = new Array()
var myCosts = new Array()
for (i = 1; i <= 5; i++)
{
myFoods[i] = prompt("Enter name of Food","");
myCosts[i] = parseFloat(prompt("Enter cost of food",""));
document.getElementById("cost").innerHTML += i + ". " + myFoods[i] + ". Cost: £" + myCosts[i] + "<br />";
}
for (var i in myCosts)
{
document.getElementById("total_cost").innerHTML =+ i;
}
}
任何人都可以提供任何帮助,我可以完成吗?
答案 0 :(得分:2)
您应该正确迭代数组:
var totalElement = document.getElementById("total_cost"),
total_cost = parseFloat(totalElement.innerHTML);
for (var i = 0, len < myCosts.length; i < len; i++) {
total_cost += myCosts[i];
}
totalElement.innerHTML = total_cost;
答案 1 :(得分:2)
您在for循环中的var
之前缺少i
个关键字。没有它i
将成为一个全局变量。此外,使用数组文字符号([]
)比编写new Array()
更短/更快/更清晰,如下所示:myArray = []
;只是一个一般提示...另请注意,for (var ... in ...)
用于迭代对象的成员,通常不会循环遍历数组。
如果您之后在脚本中没有使用myBooks
和myPrices
数组中的值,那么此处不需要任何数组 - 您可以组合两个循环并保存值从循环内的临时变量的提示返回。见下文:
function enterFood()
{
var total_cost = 0;
for (var i = 1; i <= 5; i++)
{
var name = prompt("Enter name of Food","");
var cost = parseFloat(prompt("Enter cost of food",""));
document.getElementById("cost").innerHTML += i + ". " + name + ". Cost: £" + cost + "<br />";
total_cost += cost;
}
document.getElementById("total_cost").innerHTML = total_cost;
}
另外,只需查看代码即可发表一些评论:
1)在for循环中var
之前缺少i
个关键字。没有它,我将成为一个GLOBAL变量。
2)在Javascript中,数组是一个对象,它具有各种属性,即函数。使用数组文字表示法(即[]
)比编写new Array
更简洁,更快,更快..例如myArray = []
3) For-In循环用于迭代对象的成员,通常不循环遍历数组。 For-In循环比正常循环慢。您希望使用常规循环来迭代数组。
4)如果您之后未在脚本中使用myBooks
和myPrices
数组中的值,那么此处不需要任何数组,您可以合并你的2个循环,并将提示中返回的值保存在循环内的临时变量中。
编辑:经过@Teemu更正后,i
会从for..in
循环中提升,因此不会变为全局。