FreeCodeCamp筆記之:Pig Latin

作者: delphuy | 来源:发表于2017-09-30 15:39 被阅读41次

题目

把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。
如果单词以元音开始,你只需要在词尾添加 "way" 就可以了。
如果你被难住了,记得使用 Read-Search-Ask尝试与他人结伴编程、编写你自己的代码。
这是一些对你有帮助的资源:
Array.indexOf()
Array.push()
Array.join()
String.substr()
String.split()

思路

  • 看起来是一个文字游戏,外国人的文字游戏也挺好玩的;
  • 不过恕我文盲,辅音和辅音丛是神马玩意,还有元音.....看来要动用 Read大法了;
  • Read 大法好啊,大概有4种情况:
    *1. 第一个字母是辅音,比如:lay、car、bus...,就把第一个字母加上 ay 移动到单词末尾,变成 aylay、arcay、usbay;
    *2. 前几个字母都是辅音(辅音丛),比如:Chrome、fly、play,就把前几个辅音都 加上 ay 移动到单子末尾,变成 omeChray、yflay、ayplay;
    *3.第一个字母是元音,比如:away、alarm、omelet,就把单词直接加上 way,变成 awayway、alarmway、omeletway;
    *4.单词中有多个元音音节的,比如:island、every、under,依元音分节,把第一节加上 ay 移动到单词末尾,变成 andislay、eryevay、erunday;
  • 看题目只要求了1、2、3 三种情况;
  • 因此第一步可以先定义一个变量存放所有元音字母;
  • 第二步顺序检查str的字符,是用 indexOf() 检查字符是否存在第一个变量中,得出辅音从的长度存入变量 i;碰到第一个元音时,循环结束,得出辅音从长度;
  • 最后判断:如果辅音从长度为i=0,则直接加上 way;否则str 截取 i之后的字符加上 i之前的字符再加上 ay;

解答

function translate(str) { 
  var y=['a','e','i','o','u']; //定义元音 
  var i=0; //保存辅音丛的长度
  while(i<str.length){  
    if(y.indexOf(str[i])=== -1){ // indexOf 比较结果为 -1时,则说明不存在,即当前比较的字母不为元音;
      i++;  // 记录辅音丛长度
    }
    else{
      break;
    }
  }
  if(i===0){
    return str+"way";    //元音开头
  }
   else{
    return str.substr(i)+str.substr(0,i)+"ay";    //辅音丛开头
  }
  return a;
}

这一节主要是indexOf(),还有substr()的用法;
一开始对substr不熟,没想到截取怎么做,硬是将循环的字符一个个的 分别存入2个变量,然后用join来拼接,最终结果出现错误,找了半天没找出错误在哪,后来看到题目推荐的 substr,感觉这个应该是可以用上,仔细阅读发现果然可以;
还是要仔细学习题目推荐的所有函数,有大用!

相关文章

  • FreeCodeCamp筆記之:Pig Latin

    题目 把指定的字符串翻译成 pig latin。Pig Latin 把一个英文单词的第一个辅音或辅音丛(conso...

  • Pig Latin(fcc)

    题目来自freecodecamp上面的一道练习题 在线调试把指定的字符串翻译成 pig latin。Pig Lat...

  • FreeCodeCamp筆記之:Drop it(*)

    题目 队友该卖就卖,千万别舍不得。当你的队伍被敌人包围时,你选择拯救谁、抛弃谁非常重要,如果选择错误就会造成团灭。...

  • FreeCodeCamp筆記之:Steamroller

    题目 对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。如果你被卡住了,记得开大招 Read-Search-...

  • FreeCodeCamp筆記之:Exact Change

    题目 设计一个收银程序checkCashRegister(),其把购买价格(price)作为第一个参数 , 付款金...

  • FreeCodeCamp筆記之:Symmetric Differ

    题目 创建一个函数,接受两个或多个数组,返回所给数组的对等差分(symmetric difference)(△or...

  • FreeCodeCamp筆記之:Search and Repla

    题目 使用给定的参数对句子执行一次查找和替换,然后返回新句子。第一个参数是将要对其执行查找和替换的句子。第二个参数...

  • FreeCodeCamp筆記之:DNA Pairing

    题目 DNA 链缺少配对的碱基。依据每一个碱基,为其找到配对的碱基,将结果作为第二个数组返回。Base pairs...

  • FreeCodeCamp筆記之:Finders Keepers

    题目 写一个function,它遍历数组arr,并返回数组中第一个满足func返回值的元素。举个例子,如果arr为...

  • FreeCodeCamp筆記之:Smallest Common

    题目 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数。范围是两个数字构成的数组,两个数字不一定按数字顺序...

网友评论

    本文标题:FreeCodeCamp筆記之:Pig Latin

    本文链接:https://www.haomeiwen.com/subject/kcbiextx.html