如何用更简洁的代码实现查找数组元素中的重复多字母?
更简洁的实现:筛选包含多个小写字母“o”的科技公司
你的原代码逻辑可以大幅简化——不需要多层嵌套循环和分两次筛选,用数组的filter方法配合正则或字符计数就能一步到位,而且代码可读性更强。
方案1:正则表达式匹配(最简洁)
const ItCompanies = ["Facebook", "Google", "Microsoft", "Apple", "IBM", "Oracle", "Amazon"]; const companiesWithMultipleO = ItCompanies.filter(company => (company.match(/o/g) || []).length >= 2 ); console.log(companiesWithMultipleO); // 输出 ["Google", "Microsoft"]
- 原理:用
/o/g全局匹配字符串里的所有小写“o”,match返回匹配结果数组(无匹配则返回null,所以用|| []避免报错),判断数组长度≥2即可筛选出包含多个“o”的元素。
方案2:字符计数(无正则,更直观)
如果你不想用正则,可以封装一个简单的计数函数:
const ItCompanies = ["Facebook", "Google", "Microsoft", "Apple", "IBM", "Oracle", "Amazon"]; // 计算字符串中指定字符的出现次数 const countCharOccurrences = (str, char) => str.split(char).length - 1; const companiesWithMultipleO = ItCompanies.filter(company => countCharOccurrences(company, 'o') >= 2 ); console.log(companiesWithMultipleO);
- 原理:用
split(char)把字符串按指定字符分割,分割后的数组长度减1就是该字符的出现次数,以此判断是否满足“多个”的条件。
原代码的问题说明
你的原代码存在逻辑冗余和变量冲突问题:
- 重复使用变量
i导致内层循环会覆盖外层循环的索引,逻辑混乱; - 分两次筛选(先挑含“o”的,再判断数量)效率更低;
- 多层嵌套循环让代码可读性差。
内容的提问来源于stack exchange,提问作者Snowman
相关产品推荐
相关产品推荐

