下面的代码仅执行第一个 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 中,您可以使用 let
或 const
将变量绑定(bind)到 block 作用域(在本示例中为 for 循环)
关于javascript - For 循环通过 array.length 只执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332130/