JavaScript while循环遍历数组过滤元素陷入无限循环问题求解
while循环遍历过滤数组触发无限循环问题修复
问题根因
无限循环的触发逻辑非常明确:
- 你把
i += 1写在了if判断的后面,当元素命中过滤条件(首字母为A/是数字类型)时,会执行continue直接跳过本次循环的剩余代码 - 第一个元素
"Ahmed"就满足过滤条件,触发continue后i +=1永远不会执行,i的值始终停在0,循环会反复判断同一个元素,永远无法退出 - 你之前写的for循环能正常运行,是因为for循环的i自增逻辑写在循环声明里,无论循环体内是否触发
continue,每轮循环结束后都会自动执行i自增,不会出现索引卡住的问题
修正代码
把i自增逻辑移到过滤判断之前,保证每轮循环无论是否过滤当前元素,索引都会正常向后移动,从根源避免死循环:
let friends = ["Ahmed", "Sayed", "Ali", 1, 2, "Mahmoud", "Amany"]; let i = 0; while (i < friends.length) { const currentItem = friends[i]; // 先移动索引,避免continue跳过自增逻辑 i += 1; if (currentItem[0] === "A" || typeof currentItem === "number") { continue; } console.log(currentItem); }
运行后控制台输出符合要求的结果:
Sayed Mahmoud
内容的提问来源于stack exchange,提问作者Khaled Ha
相关产品推荐
相关产品推荐

