初学者在 Javascript 中为猪拉丁语应用三元运算符,但无法弄清楚为什么它不起作用



我一直在弄清楚为什么三元运算符不会返回负输出,并且无法真正弄清楚原因。代码如下:

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 在这里的含义可能会有所帮助,但不确定它是否有意义,以及如何这样做。

我怎样才能更好地理解这一点,并使其发挥作用?谢谢!

单词"hmm"不匹配,因为该字符串没有元音。您必须对函数进行条件化才能返回正确的结果。我更新了下面的代码。

  • 我拿出了你的 else 如果,因为你无论如何都在每个条件中返回一个值,所以它在返回后不会读取任何代码。
  • 我没有看到两个封装函数的原因。
  • 我也使用了模板文字。
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"));

最新更新