Javascript 三元运算符在函数中是如何工作的?

Javascript 三元运算符在函数中是如何工作的?,javascript,algorithm,ternary-operator,Javascript,Algorithm,Ternary Operator,你能给我解释一下这个算法中的返回线吗 函数应该获取一个字符串并返回它的Pig拉丁版本,即它获取第一个辅音或辅音簇,并将其放在字符串的末尾,在末尾添加“ay” function translatePigLatin(str) { function check(obj) { return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj; } return str.subst

你能给我解释一下这个算法中的返回线吗

函数应该获取一个字符串并返回它的Pig拉丁版本,即它获取第一个辅音或辅音簇,并将其放在字符串的末尾,在末尾添加“ay”

function translatePigLatin(str) {
  function check(obj) {
      return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj;
  }

  return str.substr(check(0)).concat((check(0) === 0 ? 'w' : str.substr(0, check(0))) + 'ay');
}

// test here
translatePigLatin("consonant"); // should return "onsonantcay"
如果字符串以元音开头,那么应该在末尾加上“way”

function translatePigLatin(str) {
  function check(obj) {
      return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj;
  }

  return str.substr(check(0)).concat((check(0) === 0 ? 'w' : str.substr(0, check(0))) + 'ay');
}

// test here
translatePigLatin("consonant"); // should return "onsonantcay"

这很难理解,因为名字很可怕
obj
实际上是一个用于定位字符串中某个位置的数字,因此应该将其命名为
pos
或其他名称
check
不检查任何内容,它只是向前遍历,直到找到第一个元音,所以它应该是:

 const firstVowel = (pos = 0) => "aeiou".includes(str.charAt(pos)) ? pos : firstVowel(pos + 1);
最后一行只取第一个元音的部分(去掉开头的辅音):

如果第一个元音直接位于开头:

 str.substr(/*from*/ firstVowel() /*till end*/)
 firstVowel() === 0
 str.substr(0, /*to*/ firstVowel())
它只是附加的

 "way"
否则,它会使用开头的辅音:

 str.substr(/*from*/ firstVowel() /*till end*/)
 firstVowel() === 0
 str.substr(0, /*to*/ firstVowel())

并附加一个“y”。

希望下面的代码用注释解释它

函数翻译拉丁语(str){
功能检查(obj){
返回['a','i','u','e','o'].indexOf(str.charAt(obj))==-1?检查(obj+1):obj;
}
//返回str.substr(check(0)).concat((check(0)==0?'w':str.substr(0,check(0)))+ay');
//上述内容解释如下:
如果(检查(0)==0){
返回str.substr(检查(0)).concat('w'+'ay')
}
返回str.substr(检查(0)).concat(str.substr(0,检查(0))+'ay')
}
//在这里测试

console.log(翻译为拉丁语(“辅音”);//应该返回“onsonantcay”
如果您不确定三元语句的作用,那么将它们分解为if/else块通常会有所帮助

函数翻译拉丁语(str){
功能检查(索引){
//返回['a','i','u','e','o'].indexOf(str.charAt(obj))==-1?检查(obj+1):obj;
//将三元分解为传统if,并将obj改为索引,使其更具描述性
常量元音=['a'、'i'、'u'、'e'、'o'];
//如果给定索引处的字符存在,则检查下一个字符
if(元音索引of(str.charAt(索引))=-1){
退货检查(索引+1)
}
//otherwide返回索引(元音大小写)
收益指数;
}
//返回str.substr(check(0)).concat((check(0)==0?'w':str.substr(0,check(0)))+ay');
//将基本翻译单词设置为单词中非元音的第一个字母。
常量索引键=检查(0)
//获取索引键后的字符串
让substringed=str.substr(indexKey)
//从开始到索引键获取字符串
让追加=str.substr(0,索引键);
//如果索引键是第一个字母(单词以元音开头),请使用“w”
如果(索引键===0){
追加='w';
}
//返回字符串
返回`${substringed}${added}ay`;
}
//在这里测试
const singleConsonant=翻译后的拉丁语(“常量”);
常量双辅音=翻译后的拉丁语(“链”);
常量元音=翻译拉丁语(“分析”)

log(单辅音、双辅音、元音)不确定你在问什么
return
仅返回函数的值?@proeviz,translateUpLatin函数的返回行中的逻辑是如何工作的?您的函数在技术上与OP不同。使用提供的原始代码…我从未说过你做过或不知道你在做什么,所以我不确定你为什么要澄清你是做还是不做。。“也许除了小气之外?”普罗维兹正是这样<代码>由于…,您的功能在技术上与OP不同
?没有任何有用的反馈或批评的非常含糊的声明
使用提供的原始代码
命令也没有任何帮助。我不确定在您编写代码的情况下,它怎么不是非常明显?OP有箭头功能吗?OP是使用字符串
aeiou
还是使用数组?我很惊讶你不得不问这有什么不同。使用原始代码,例如,获取OP的代码,将其分解并解释。他们没有要求创建新函数,也没有要求随后对其进行解释