我正在研究Pig Latin练习,但我不明白我的元音逻辑到底有什么问题,从而使console.log无法定义?
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(str.charAt(0) == vowel) {
return str + "way";
}
}
但是,如果我要测试不是以元音开头的单词,则我的代码可以正常运行。
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(str.charAt(0) !== vowel) {
var firstChar = str.slice(0, 1);
return str.slice(1) + firstChar + "ay";
}
}
为什么第一段代码设置不正确?我忽略或误解了什么?谢谢。
答案 0 :(得分:0)
您在if
块中使用的条件是错误的-您正在检查str
的第一个字符是否等于vowel
数组本身。永远是false
。
再加上第二个示例中使用的条件仅仅是第一个示例的否定,它将始终为true
。 if
块也将以元音开头的字符串运行。
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(str.charAt(0) !== vowel) {
var firstChar = str.slice(0, 1);
return str.slice(1) + firstChar + "ay";
}
}
console.log(pigLatin('arnor'))
将代码更改为以下内容,以检查str
的第一个字符是否是vowels
数组的成员:
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
if(vowel.indexOf(str.charAt(0)) >= 0) {
return str + "way";
}
}
console.log(pigLatin('arnor'));
console.log(pigLatin('beorn'));
答案 1 :(得分:0)
感谢Yaakov Ainspan和Ramya Ramanthan的澄清,并感谢我在第二个段落中发现了我的错误!
这是经过大量研究和实验后我想到的。
function pigLatin(str){
const vowel = ["a", "e", "i", "o", "u"];
const consonant = "/[^aeiou]{2,}/"
if(vowel.indexOf(str.charAt(0)) >= 0) {
return str + "way";
} else {
for (var i = 0; i < str.length; i++){
if(consonant.indexOf(str[i]) >= 0){
var firstChar = str.slice(0, i);
var multiCon = str.slice(i, str.length);
return multiCon + firstChar + "ay";
}
}
}
}
起初,我在consonant
字符串的if
变量的第二个块中遇到了同样的问题。原来我犯了同样的错误-检查数组的str。在将const consonant
而不是用方括号括起来后,问题消失了。
请告诉我我的代码是否仍然存在我无法预见的问题。 :)
注意:我知道另一条关于猪的拉丁语规则,该规则涉及以辅音开头但听起来像元音的单词(例如,我代码中的“诚实”应该是onesthay而不是诚实)。我无视那个规则。