我一直想弄清楚为什么三元运算符不会返回负输出,也无法真正弄清楚为什么。这是代码:
function translatePigLatin(str) {
let reg=/[aeiou]/gi;
let firstVowel = str.indexOf(str.match(reg)[0]);
//console.log(firstVowel);
return str.match(reg) == 1 ? play(str) : str + "ay";
function play(str) {
if(str[0].match(reg)){
return str+"way";
}else if(str[1].match(reg)){
return str.slice(1) + str[0]+ "ay"
} else if(str.match(reg)!==null){
return str.slice(firstVowel) +str.slice(0,firstVowel)+"ay";
} else {
return str+"ay";
}
}
}
console.log(translatePigLatin("consonant"));
console.log(translatePigLatin("eight"));
console.log(translatePigLatin("glove"));
console.log(translatePigLatin("hmm"));
最后一个带有“ hmm”的测试导致错误:“ TypeError:str.match(...)为null”。
我对空值在这里的含义有更好的理解,但不确定是否有意义以及如何实现。
我该如何更好地理解它并使其起作用?谢谢!
答案 0 :(得分:0)
“ hmm”一词不匹配,因为该字符串没有元音。您必须对函数进行条件化以返回正确的结果。我更新了下面的代码。
function translatePigLatin(str) {
const reg = /[aeiou]/gi;
const match = str.match(reg);
const firstVowel = match ? str.indexOf(match[0]) : null;
if (!firstVowel) {
return `${str}ay`;
}
if (str[0].match(reg)) {
return `${str}way`;
}
if (str[1].match(reg)) {
return `${str.slice(1)}${str[0]}ay`;
}
if (str.match(reg)!== null) {
return `${str.slice(firstVowel)}${str.slice(0,firstVowel)}ay`;
}
};
console.log(translatePigLatin("consonant"));
console.log(translatePigLatin("eight"));
console.log(translatePigLatin("glove"));
console.log(translatePigLatin("hmm"));