初学者在Java语言中为Pig Latin应用三元运算符,但无法弄清楚为什么它不起作用

时间:2019-10-08 04:24:58

标签: javascript ternary-operator

我一直想弄清楚为什么三元运算符不会返回负输出,也无法真正弄清楚为什么。这是代码:

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”。

我对空值在这里的含义有更好的理解,但不确定是否有意义以及如何实现。

我该如何更好地理解它并使其起作用?谢谢!

1 个答案:

答案 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"));