如何仅用for循环筛选数组中不含'l'的元素?解决代码重复问题
问题分析与解决
原代码出现重复元素的原因是:内层循环遍历字符串的每个字符时,只要当前字符不是'l'就将整个元素推入新数组,导致一个元素会被重复添加多次(次数等于该元素中不含'l'的字符数量)。
修正后的代码
var list = ['sage', 'carolina', 'everly', 'carlos', 'frankie']; var list1 = []; // 遍历原数组的每个元素 for (let i = 0; i < list.length; i++) { let containsL = false; // 检查当前元素的每个字符 for (let j = 0; j < list[i].length; j++) { if (list[i][j].toLowerCase() === 'l') { containsL = true; break; // 找到'l'后立即停止检查当前元素 } } // 确认元素不含'l'时,推入新数组 if (!containsL) { list1.push(list[i]); } } console.log(list1); // 输出结果: ["sage", "frankie"]
逻辑说明
- 外层
for循环遍历原数组的所有元素,避免使用for...in(防止遍历到数组原型链上的额外属性) - 对每个元素,先初始化
containsL标记为false,默认该元素不含'l' - 内层
for循环遍历元素的每个字符,通过toLowerCase()统一转换为小写后检查是否等于'l',一旦找到就将containsL设为true并跳出内层循环(无需继续检查剩余字符) - 最后判断
containsL为false时,说明该元素完全不含'l',调用push()将其加入新数组
内容的提问来源于stack exchange,提问作者Alaby Martinez
相关产品推荐
相关产品推荐

