FreeCodeCamp筆記之:Pig Latin

题目

把指定的字符串翻译成 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,感觉这个应该是可以用上,仔细阅读发现果然可以;
还是要仔细学习题目推荐的所有函数,有大用!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、字母与发音一一对应的辅音 b -- ball d -- dog f -- fish h -- hat j --...
    Nina幸福2021阅读 7,627评论 2 17
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,270评论 0 4
  • 在大学的生活中其实有些事情就是想到就要去做,切记不要拖,拖延可能会毁了你。 有些时候觉得自己缺少一份勇气,其实作为...
    潘赛楠阅读 142评论 0 0
  • 2005年我第一次正式“经商”,因老板不给报销30的打车钱,我用一学期的学费自立门户。宿舍四个兄弟,跑了重庆所有学...
    时光菌阅读 191评论 0 0