函数根本不返回任何东西,但 console.log 返回一些东西

时间:2021-03-23 16:32:47

标签: javascript

我试图在 js 中运行这个函数,这个函数应该检查字符串是否有任何重复的字母,如果有则返回 false,如果没有则返回 true 但它不返回任何内容。我正在尝试比较两个字符串并根据它返回 true 或 false。

function isIsogram(str) {
  let str1 = str.toLowerCase().split("");
  //console.log(str.toLowerCase())
  let str2 = []
  for (let i = 0; i < str1.length; i++) {
    //console.log(str1[i])
    if (str2.indexOf(str1[i]) === -1) {
      str2.push(str1[i])
    }
  }
  //console.log(str2)
  if (str2 === str1) {
    return true;
  } else return false;
}


console.log(isIsogram("abba"))

5 个答案:

答案 0 :(得分:1)

您可以尝试使用以下方法:

 function hasRepeatedChar(text){ 
     return text.split("").some(
            function(v,i,a){
                return a.lastIndexOf(v)!=i
            }
     );
 }

这个答案很好地解释了它: Check for repeated characters in a string Javascript

答案 1 :(得分:0)

我认为你可以像这样优化你的算法:

function isIsogram(str) {
  let foundChars = [];
  
  for (let i = 0; i < str.length; i++) {
      const char = str[i];
      if (foundChars.includes(char)) {
          return false;
      }
      foundChars.push(char);
  }
  
  return true;
}


console.log(isIsogram("ab"));
console.log(isIsogram("abba"));

答案 2 :(得分:0)

One 不是简单地比较两个数组。但是你可以先把它们连接成字符串,然后比较。

function isIsogram(str) {
  let str1 = str.toLowerCase().split("");
  
  let str2 = []
  for (let i = 0; i < str1.length; i++) {
    
    if (str2.indexOf(str1[i]) === -1) {
      str2.push(str1[i])
    }
  }

  if (str2.join('') === str1.join('')) {
    return true;
  } else return false;
}


console.log(isIsogram("abba"))

此外,我为您提供了一个更简单的解决方案,即利用 Set

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

console.log(isIsogram("abba"), isIsogram("abc"))

答案 3 :(得分:0)

您正在尝试使用 str2 === str1 比较两个包含字符的数组。不幸的是,严格相等运算符 === 旨在比较原始类型,如字符串或数字而非数组。

在您的代码中,最快的解决方案是使用 join 方法将 str1str2 都转换为字符串,然后像 str2.join('') === str1.join('') 一样比较它们。

阅读有关 javascript here 中的相等性检查和连接方法 here

的更多信息

附言- 这不是最好/最优的方法,但足够简单,可以开始。

答案 4 :(得分:0)

我认为这有效:

function isIsogram(str) {
    let str1 = str.toLowerCase().split("");
    let str2 = [];
    for (let i = 0; i < str1.length; i++) {
        if (str2.indexOf(str1[i]) === -1) {
            str2.push(str1[i]);
        }
        else{
            return false;
        }
    }
    return true;
}


console.log(isIsogram("abba"));