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

JavaScript数组相等性检查问题:CodeWars题目等值判断报错求助

排查等值图(Isogram)判断代码的错误

嘿,我一眼就看到你代码里的关键问题啦,咱们来一步步拆解:

核心错误分析

你在内部循环的判断条件里写了 if (split[i] !== split[i][j]) —— 这是个典型的笔误!

  • split 是你把字符串转小写后拆分得到的字符数组,split[i] 已经是单个字符了(比如输入是"abca"时,split[0]就是"a")。
  • split[i][j] 相当于去取这个单个字符的第j个索引位置,而单个字符的字符串只有索引0,当j>0时这个值永远是undefined,所以你的判断条件永远为真,自然永远不会进入else分支打印"They are equal"。

修正后的完整代码

首先把判断条件改成 split[i] === split[j],同时补充函数的返回逻辑(原代码没返回结果),还可以在发现重复时直接终止循环提升效率:

function isIsogram(str){ 
  const split = str.toLowerCase().split(''); 
  let result = true; 
  // 用let声明循环变量,避免变量提升导致的逻辑问题
  for (let i = 0; i < split.length; i++){ 
    for (let j = i+1; j < split.length; j++){ 
      if (split[i] === split[j]) { 
        console.log(`${split[i]} 和 ${split[j]} 重复了`); 
        result = false;
        // 发现重复直接跳出所有循环,不用继续判断
        return result;
      } 
    } 
  } 
  return result;
} 

// 测试用例
console.log(isIsogram("abca")); // 输出false
console.log(isIsogram("abcde")); // 输出true

更简洁的实现方式

其实用ES6的Set可以更优雅地实现这个功能,因为Set会自动去除重复元素,我们只需要比较去重后的长度和原字符串转小写后的长度是否相等:

function isIsogram(str) {
  const lowerStr = str.toLowerCase();
  return new Set(lowerStr).size === lowerStr.length;
}

这个方法代码更简洁,执行效率也更高,推荐使用~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:25:45