Javascript FCC中间算法脚本:Pig Latin

Javascript FCC中间算法脚本:Pig Latin,javascript,string,Javascript,String,这个测试的目的是取一个英语单词的第一个辅音(或辅音串),将它移到单词的末尾,并加上后缀“ay”。如果一个单词以元音开头,你只需在末尾加上“way” 我的主要问题是遍历字符串,直到它到达一个元音,并将第一个辅音字母放在字符串的末尾 我在遍历字符串直到它到达元音之前遇到困难。如何迭代字符串直到它在第一个元音处停止?在第一个辅音字母到达元音之前,你是如何得到所有的第一个辅音字母的?我通过使用for循环来迭代字符串,如果第一个字母是辅音,则使用“if”语句 function translatePigLa

这个测试的目的是取一个英语单词的第一个辅音(或辅音串),将它移到单词的末尾,并加上后缀“ay”。如果一个单词以元音开头,你只需在末尾加上“way”

我的主要问题是遍历字符串,直到它到达一个元音,并将第一个辅音字母放在字符串的末尾

我在遍历字符串直到它到达元音之前遇到困难。如何迭代字符串直到它在第一个元音处停止?在第一个辅音字母到达元音之前,你是如何得到所有的第一个辅音字母的?我通过使用for循环来迭代字符串,如果第一个字母是辅音,则使用“if”语句

function translatePigLatin(str) {
  var vowel = /[aeiou]/g;
  var cons = /[^aeiou]/g;
  console.log(cons.test(str[2]))
  var consonants = [];
  var index = str.charAt(0);

  console.log(str.slice(1, str.length))
  for(var i = 0; i < str.length; i++){
    console.log(str[i])
    if(cons.test(str[i])){
      consonants.push(str.charAt(i));
      console.log(consonants)
      var slice = str.slice(consonants.length, str.length);
    }
  }
  return consonants + 'ay';
}
函数翻译拉丁语(str){
变量元音=/[aeiou]/g;
变量cons=/[^aeiou]/g;
console.log(cons.test(str[2]))
var辅音=[];
var指数=str.charAt(0);
console.log(str.slice(1,str.length))
对于(变量i=0;i

翻译拉丁语(“手套”)

我会专注于找到第一个元音的索引。然后您可以测试该索引是0还是其他值。如果为零,只需在该索引上添加
路径
或切片:

函数翻译拉丁语(str){
常量元音=['a','e','i','o','u'];
let ind=[…str.toLowerCase()].findIndex(s=>元音。包含)
返回ind
?str.slice(ind)+str.slice(0,ind)+'ay'//不以元音开头
:str+'way'
}
console.log(翻译为拉丁语(“手套”)
console.log(翻译为拉丁文('apple'))
console.log(拉丁文('Mark'))

log(translateepiglatin('Javascript'))
我只想找到第一个元音的索引。然后您可以测试该索引是0还是其他值。如果为零,只需在该索引上添加
路径
或切片:

函数翻译拉丁语(str){
常量元音=['a','e','i','o','u'];
let ind=[…str.toLowerCase()].findIndex(s=>元音。包含)
返回ind
?str.slice(ind)+str.slice(0,ind)+'ay'//不以元音开头
:str+'way'
}
console.log(翻译为拉丁语(“手套”)
console.log(翻译为拉丁文('apple'))
console.log(拉丁文('Mark'))

log(translateUplatin('Javascript'))
我认为应该将问题分解为一些基本情况,就像我在下面的代码中所做的那样:

  • 检查第一个字母是否为元音;如果为真,只需在单词末尾添加“way”并打破循环即可

  • 如果当前字母是辅音(这意味着第一个条件不是真的),我们就继续迭代

  • 如果当前的字母是元音,我们将单词分成两个独立的部分,并以相反的方式添加它们,不要忘记添加“ay”后缀

  • 在下面的代码中,我还向元音数组添加了大写版本。经过一些修改,可以使其跳过分隔符。猪拉丁语规则是我在维基百科上找到的(尽管我没有找到任何只包含辅音的单词的规则,所以我把它们放在第一个例子中)。 干杯

    函数有(a,e){
    返回a.indexOf(e)>-1;
    }
    函数translateWord(str){
    让誓言=['a','e','i','o','u'];
    vows=vows.concat(vows.map(v=>v.toUpperCase());
    设LastVouerLindex=0;
    让conv='';
    for(设i=0;itranslateWord(w));
    return.join(“”);
    }
    设s=translateToPigLatin(“我没有节奏”);
    
    控制台日志我认为您应该将问题分解为一些基本情况,就像我在下面的代码中所做的那样:

  • 检查第一个字母是否为元音;如果为真,只需在单词末尾添加“way”并打破循环即可

  • 如果当前字母是辅音(这意味着第一个条件不是真的),我们就继续迭代

  • 如果当前的字母是元音,我们将单词分成两个独立的部分,并以相反的方式添加它们,不要忘记添加“ay”后缀

  • 在下面的代码中,我还向元音数组添加了大写版本。经过一些修改,可以使其跳过分隔符。猪拉丁语规则是我在维基百科上找到的(尽管我没有找到任何只包含辅音的单词的规则,所以我把它们放在第一个例子中)。 干杯

    函数有(a,e){
    返回a.indexOf(e)>-1;
    }
    函数translateWord(str){
    让誓言=['a','e','i','o','u'];
    vows=vows.concat(vows.map(v=>v.toUpperCase());
    设LastVouerLindex=0;
    让conv='';
    for(设i=0;ifunction translatePigLatin(str) {
    let res = '';
    
    let regex = /[aeiou]/;
    
    if (!regex.test(str)) {
      res = str + 'ay';
    } else if (regex.test(str[0])) {
      res = str + 'way';
    } else {
      let x  = str.indexOf(regex.exec(str)[0]);
      res = str.substr(x) + str.substr(0, x) + 'ay'
    }
    return res;