You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript全字母句函数问题:continue后如何正确终止循环?

问题分析与解决方案

你的代码存在两个关键问题:

  1. return true 被放在了for循环内部,由于continue会跳过本次循环剩余语句,这行代码永远不会被执行;当所有字母都检查通过时,循环结束后函数无返回值,会默认返回undefined。
  2. 每次循环都重复调用string.toLowerCase(),冗余操作会浪费性能,应该提前统一转换一次。

修正后的基础版本

先把字符串转成小写,遍历字母表逐一检查,只要有一个字母不存在就立即返回false,全部检查通过后返回true:

function isPangram(string) {
  const lowerStr = string.toLowerCase();
  const alphabet = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];

  for (let i = 0; i < alphabet.length; i++) {
    if (!lowerStr.includes(alphabet[i])) {
      return false;
    }
  }
  return true;
}

console.log(isPangram("The quick brown fox jumps over the lazy dog")); // 输出 true

更简洁的实现方式

利用Set去重特性

提取字符串中的字母(转小写、过滤非字母字符),存入Set后判断集合大小是否为26:

function isPangram(string) {
  const uniqueLetters = new Set(string.toLowerCase().replace(/[^a-z]/g, ''));
  return uniqueLetters.size === 26;
}

正则正向预查

用正则的正向预查语法,一次性检查所有字母是否存在(i标志忽略大小写):

function isPangram(string) {
  return /(?=.*a)(?=.*b)(?=.*c)(?=.*d)(?=.*e)(?=.*f)(?=.*g)(?=.*h)(?=.*i)(?=.*j)(?=.*k)(?=.*l)(?=.*m)(?=.*n)(?=.*o)(?=.*p)(?=.*q)(?=.*r)(?=.*s)(?=.*t)(?=.*u)(?=.*v)(?=.*w)(?=.*x)(?=.*y)(?=.*z)/i.test(string);
}

内容的提问来源于stack exchange,提问作者Faultier321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:30:47