使用For-In循环计算阵列值

时间:2013-02-11 12:44:42

标签: javascript

我有以下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; 
    } 
}  

任何人都可以提供任何帮助,我可以完成吗?

2 个答案:

答案 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 ...)用于迭代对象的成员,通常不会循环遍历数组。

如果您之后在脚本中没有使用myBooksmyPrices数组中的值,那么此处不需要任何数组 - 您可以组合两个循环并保存值从循环内的临时变量的提示返回。见下文:

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)如果您之后未在脚本中使用myBooksmyPrices数组中的值,那么此处不需要任何数组,您可以合并你的2个循环,并将提示中返回的值保存在循环内的临时变量中。

编辑:经过@Teemu更正后,i会从for..in循环中提升,因此不会变为全局。