2017-10-09 112 views
-1

创建一个名为isIsogram的函数,该函数接受一个参数,一个单词用于测试它是否为等值线图。这个函数应该返回一个布尔值来指示它是一个isogram(true)还是not(false)。这里是相应的代码:函数中的for循环不正确

function isIsogram(word){ 
    if (typeof word !== 'string'){ 
     return 'Argument should be a string'; 
    } 

    if (word === ' '){ 
     return false; 
    } 

    else{ 
     for(var i=0; i<word.toLowerCase().length; i++){ 
     if (word.charAt(i)>1){ 
      return false; 
     } 
     else{ 
      return true; 
     } 
     } 
    } 
    } 
    console.log(isIsogram('Akosombo')); 

'Akosombo'应该返回false,但它返回true。

+2

https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – David

回答

2

这在逻辑上是不相关的:

word.charAt(i) > 1 

所有这些评估为false

  • 'A' > 1
  • 'k' > 1
  • 'o' > 1
  • 's' > 1
  • 'o' > 1
  • 'm' > 1
  • 'b' > 1
  • 'o' > 1

更多提示:

  1. 您应该检查的Isogram定义。
  2. 您应该只在for循环之后return true
+0

我知道什么是等值线图,我只需要for循环的帮助,因为它是控制器。无论如何,感谢提示@aaron,但我已经排序了,是的,你是正确的最后返回语句应该在哪里 – danoseun

0

根据Wikipedia,等值线是一个没有重复字母的词或短语。

所以在这里你必须检查重复的字母。这里是我的方法(在你的代码中稍作改动)来检查它是否是等值线?

function isIsogram(word) { 
    var matches = 0; 
    var count = 0; 
    if (typeof word !== 'string') { 
     return 'Argument should be a string'; 
    } 

    if (word === ' ') { 
     return false; 
    } else { 
     for (var i = 0; i < word.toLowerCase().length; i++) { 
      matches = word.match(new RegExp(word.charAt(i), 'gi')); 
      if (matches.length > 1) 
       count++; 
     } 
     if (count > 0) 
      return false; 
     else 
      return true; 
    } 
} 
isIsogram('Akosombo'); 

而且由于它具有重复字符,即'o',结果将是错误的,单词'Akosombo'。

+0

当我测试它时,你的代码根本不起作用,但是谢谢,我已经解决了它昨天 – danoseun

+0

@达那顺,它的工作原理,我测试过它。 – skm

+0

哦,是的,你说得对,但是当我在某处测试它时,它运行的所有测试都失败了,但是当我在终端中运行它时,它打印了一个布尔值并且未定义。我不认为它应该在布尔型 – danoseun