javascript - For 循环通过 array.length 只执行一次

标签 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');
}

最佳答案

在您的代码中,您使用“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 和 C# 中一样)。在 ES2015 中,您可以使用 letconst 将变量绑定(bind)到 block 作用域(在本示例中为 for 循环)

关于javascript - For 循环通过 array.length 只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332130/

相关文章:

javascript - 将日期对象存储到数组

r - 列表列表中元素替换的慢循环

c++ - C++17 中新的基于范围的 for 循环如何帮助 Ranges TS?

variables - for 循环中的 SCSS 第 n 个子级?

javascript - 为什么 JSLint 使用此代码给我一个 "Unexpected ' .'"错误?

javascript - 配额及其消耗如何运作?

javascript - 使用 for 循环检查数组

java - 创建一个 Java for 循环来连接 2 组字符串

javascript - Acrobat 的 Javascript 控制台无法工作

javascript - 如何解决 AWS 错误 : "The difference between the request time and the current time is too large" front-end only?