我写了一个代码遍历数组,当我使用while和其中的continue语句时,我陷入了无限循环:
function loop(){
var x = [1,2,3,4,5,6,7,8]
var i = 0;
while ( i < x.length){
if (x[i] % 2 == 0){
continue;
}
i++
}
console.log(x[i])
}
loop()
我尝试将i++
添加到循环外,并在循环内得到相同的结果。
预期结果是1,3,5,....等等,实际结果是无限循环。
答案 0 :(得分:3)
问题是i
应当增加条件是否成立,否则它将继续无限期地反复测试相同的值。
function loop(){
const x = [1,2,3,4,5,6,7,8]
for(let i = 0; i < x.length; i++){
if (x[i] % 2 == 0){
continue;
}
console.log(x[i])
}
}
loop()
现代JS:
function loop(){
const x = [1,2,3,4,5,6,7,8]
return x.filter(n=>n % 2 !== 0);
}
const res = loop();
console.log(res);
答案 1 :(得分:1)
continue
立即进入循环的下一个迭代,跳过循环主体的其余部分。因此,它跳过了i++
,并且下一次迭代测试了相同的x[i]
。由于没有任何变化,因此条件再次成功,因此它会继续执行相同的操作。
您只想跳过console.log(x[i])
语句,而不要跳过正文中的所有内容。
此外,您根本没有将console.log(x[i])
放在循环中,因此即使循环正常工作,您也不会打印出奇数元素;循环完成后,它只会打印x[i]
,并且由于i
会在数组之外,因此它将打印`undefined。
function loop() {
var x = [1, 2, 3, 4, 5, 6, 7, 8]
var i = 0;
while (i < x.length) {
if (x[i] % 2 != 0) {
console.log(x[i]);
}
i++
}
}
loop()
如果您确实要使用while
和continue
,则可以在测试前放置i++
。但是,当您将1
用作数组索引时,必须从i
中减去function loop() {
var x = [1, 2, 3, 4, 5, 6, 7, 8]
var i = 0;
while (i < x.length) {
i++;
if (x[i - 1] % 2 == 0) {
continue;
}
console.log(x[i - 1]);
}
}
loop()
。
for
您还可以使用while
循环而不是i++
,因为for()
将位于function loop() {
var x = [1, 2, 3, 4, 5, 6, 7, 8]
for (var i = 0; i < x.length; i++) {
if (x[i] % 2 == 0) {
continue;
}
console.log(x[i])
}
}
loop()
标头中,该标头每次都会执行。
#blog {margin: 0; padding: 0;}
#blog li {float: left; width: 48%; list-style: none;}
#blog li:nth-child(2n) {float: right;}
#blog li:nth-child(2n+1) {clear: both;}
#blog li img {display: block; width: 100%; height: calc(100% / 2.5);} /* 2.5 is width/height ratio */
答案 2 :(得分:0)
如果您的目标是在循环中打印出奇数,请尝试仅打印它们:
function loop() {
var x = [1,2,3,4,5,6,7,8]
var i = 0;
while ( i < x.length){
if (x[i] % 2 == 1){
console.log(x[i]);
}
i++;
}
}
loop()
现在正在发生的事情是您的循环没有增加i
,因此当数字甚至是您continue
就在i++
之后并且永远都不会超过该数字时,导致无穷大环。这样,无论数字是奇数还是偶数i。
答案 3 :(得分:0)
之所以会这样,是因为您没有在条件中增加i
。
使用此:
function loop(){
var x = [1,2,3,4,5,6,7,8]
var i = 0;
while ( i < x.length){
if (x[i++] % 2 == 0){
continue;
}
console.log(i);
}
console.log(x[i])
}
loop()
答案 4 :(得分:-2)
如果要遍历数组,请使用for
循环