for loop through array.length只执行一次

时间:2016-10-30 18:18:29

标签: javascript for-loop

以下代码仅通过第一个for循环执行一次,但所有其他for循环都按预期执行。有谁知道为什么会这样?我不确定循环中的大部分(低效,格式不良)代码是否相关,但我仍然包含它。

var numbers = [9795526789839145, 2861747566959730, 4498854833783559, 6301982162016598, 1131197164065322];
for (i = 0; i < numbers.length; i++) {
    var current = numbers[i];
    var currentStr = current.toString();
    var reverseStr = currentStr.split('').reverse().join('');
    var reverseArr = [];

    for (i = 0; i < reverseStr.length; i++) {
        reverseArr.push(reverseStr[i]);
    }

    var A = 0;
    for (i = 0; i < reverseArr.length; i += 2) {
        A += Math.round((reverseArr[i]));
    }

    var evenDigits = [];
    for (i = 1; i < reverseArr.length; i += 2) {
        evenDigits.push(reverseArr[i]);
    }

    for (i = 0; i < evenDigits.length; i++) {
        evenDigits[i] = evenDigits[i] * 2;
        if (evenDigits[i] > 9) {
            var temp = evenDigits[i].toString();
            var firstInt = Math.round(temp[0]);
            var secondInt = Math.round(temp[1]);
            evenDigits[i] = firstInt + secondInt;
        }
    }

    var B = 0;
    for (i = 0; i < evenDigits.length; i++) {
        B += evenDigits[i];
    }

    var sum = A + B;

    if (sum % 10 == 0) {
        console.log('Yes');
    } else console.log('No');
}

1 个答案:

答案 0 :(得分:0)

在您的代码中,您使用相同的'i'变量实例来迭代所有循环。

解决方案是使用不同的索引变量来迭代外部和内部循环

var numbers = [9795526789839145, 2861747566959730, 4498854833783559, 6301982162016598, 1131197164065322];
var i = 0;
var j = 0;
for (j=0; j < numbers.length; j++) {
    var current = numbers[j];
    /...
}

JavaScript的行为与此类似,因为'i'没有作用域(如Java od C#)。在ES2015中,您可以使用letconst将变量绑定到块范围(在此示例中为for循环)