用Javascript判断一个字符串是否是isogram——逻辑复习

Check whether a string is an isogram with Javascript - logic review

我尝试解决一个字符串是否为等值图的问题如下:
我不明白为什么我的代码不起作用。请问谁能帮忙解释一下为什么?
等值线图没有连续或非连续的重复字母。
我曾尝试: 1- 将字符串转换为小写并将其设为数组。 2- 如果字符串为空,则创建一个 if 检查 return true。 3- 运行 for 循环遍历数组并比较每个字母的 firstIndex 和 lastIndex。如果第一个实例和最后一个实例不相同,则字符串不能是等值线图,因此 return false。??

    function isIsogram(str){
      str = str.toLowerCase();
      let text = str.split("");
      if (text.length === 0) { 
        return true;
      }
      for (let i = 0; i < text.length; i++) {
        if ( text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){
          return false;
        } else {
          return true;
        }
      } 
    }

一个简单的更改应该可以解决问题。您现有的功能只考虑第一个字符。然后,这将跳过字符串中的任何重复字符,例如 return 对于 'abb' 是正确的,这当然是不正确的。

最好继续到循环结束,只有在我们确定没有重复字符时才 return 为真。

function isIsogram(str){
    str = str.toLowerCase();
    let text = str.split("");
    if (text.length === 0) { 
        return true;
    }
    for (let i = 0; i < text.length; i++) {
        if (text.indexOf(text[i]) !== text.lastIndexOf(text[i]) ){
            return false;
        }
    }
    return true;
}

const testInputs = ['abb','aab','aba','abc','abcdz'];
testInputs.forEach(input => console.log(`isIsogram(${input}): ${isIsogram(input)}`));

这是另一种实现方式,使用 Set() 来计算唯一字符数。如果字符串没有重复字符,那么set size给定的唯一字符个数应该和输入的字符串长度一样。

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

const testInputs = ['abb','aab','aba','abc', 'abcdz'];
testInputs.forEach(input => console.log(`isIsogram(${input}): ${isIsogram(input)}`));