2015-07-12 68 views
1

目的 给定一个字符串,翻译串入PigLatin(如果字符串以元音开头,追加“的方式”结束串 - 别人看的第一个元音并采取所有前面的字母,并在str的末尾放置,添加“ay”)。PigLatin问题与SUBSTR()和slice()

CODE

function translate(str) { 

    //list vowels 
    var vowel = ['a', 'e', 'i', 'o', 'u']; 

    //if first letter = vowel, add 'way' to end of sentence 
    // else return all letters before first vowel and append to end (with 'ay') 
    for (var i = 0; i < str.length; i++) { 
     if (vowel.indexOf(str[0]) > -1) { 
      return str + 'way'; 
     } else { 
      return str.substr(i+1) + str.slice(0,i+1) + 'ay'; 
     } 
    } 
} 




translate("dresser"); 

质询

  1. 上述代码工作的情况下,这样的 “算法” 和 “桌子”,但与 “手套” 失败 - 导致我相信问题在于.substr()或.slice()。另外的调查认为这是一个逻辑错误。任何帮助表示赞赏!

回答

1

问题是,在第一次迭代期间,您的代码将始终从循环中返回。 i将永远不会大于0.

你应该做的(对于初学者)是从循环内移除检查。像这样:

function translate(str) { 

    //list vowels 
    var vowel = ['a', 'e', 'i', 'o', 'u']; 
    //if first letter = vowel, add 'way' to end of sentence 
    if (vowel.indexOf(str[0]) > -1) { 
     return str + 'way'; 
    } 

    // else return all letters before first vowel and append to end (with 'ay') 
    for (var i = 0; i < str.length; i++) { 
     if (vowel.indexOf(str[i]) > -1) { 
      return str.substr(i) + str.slice(0,i) + 'ay'; 
     } 
    } 
} 

这段代码应该有效。

+0

hmmmm ...你能精心设计吗? 当vowel.indexOf(str [i])> -1时,我需要使用'break'语句吗? – jonplaca

+0

@kidlogic不,没有中断声明。你无条件地从循环中过早地返回。我用适用的代码更新了我的答案。我拿出'i + 1'并用'i'替换它们。 – yts

+0

你为此 - 我感到愚蠢,因为我最近有非常相似的代码,但后来认为我是多余的我的vowel.indexOf(str [i])> -1 谢谢! – jonplaca

0

如果字符是元音,您将返回值而不测试。

function translate(str) { 

    //list vowels 
    var vowel = ['a', 'e', 'i', 'o', 'u']; 

    //if first letter = vowel, add 'way' to end of sentence 
    // else return all letters before first vowel and append to end (with 'ay') 
    for (var i = 0; i < str.length; i++) { 
     if (vowel.indexOf(str[0]) > -1) { 
      return str + 'way'; 
     } else if(vowel.indexOf(str[i]) !== -1) { 
      return str.substr(i) + str.slice(0,i) + 'ay'; 
     } 
    } 
} 

请注意我如何添加if来测试字符是否为元音。

jsfiddle