把指定的字符串翻译成 pig latin。
Pig Latin 把一个英文单词的第一个辅音或辅音丛(consonant cluster)移到词尾,然后加上后缀 "ay"。
如果单词以元音开始,你只需要在词尾添加 "way" 就可以了
思路:
(1)先把所给单词转化为数组;
(2)在数组里寻找元音的索引,并选择数字最小的那个索引,这就是第一个元音的位置;
(3)如果最小的索引是0,也就是单词第一个字符是元音,那直接在单词后面加字符串way;
(4)如果最小的索引不是0,这里有两种放法:
第一种,对数组进行操作,把数组里元音前的元素转移到数组后在加上一个元素ay;
第二种,直接对字符串操作,把字符串元音前的字母转移到字符串后面加上一个字符串ay;
其中直接对字符串操作较为直观,也就用不到Array.join()方法
知识点:
(1)String.split()方法将一个
String
对象分割成字符串数组,通过
将字符串分成子串;
var letterArr = str.split('');
(2)Array.indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1;
1 for (var i = 0; i < vowelArr.length; i++) { 2 if (letterArr.indexOf(vowelArr[i]) !== -1) { 3 var a = letterArr.indexOf(vowelArr[i]); 4 numArr.push(a); 5 } 6 }
(3)Array.push()方法将一个或多个元素添加到数组的末尾,并返回数组的新长度;
(4)Math.max函数返回一组数中的最大值,但他不接受数组做参数,所以要使用Math.max.apply()方法;
var min = Math.min.apply(null, numArr);
(5)String.concat()方法将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回,
就是链接两个字符串;
(6)String.substr()方法返回一个字符串中从指定位置开始到指定字符数的字符,
它不会修改原字符串!
var head = str.substr(0, min); str = str.substr(min);
总代码:
1 function translate(str) { 2 var numArr = []; 3 var letterArr = str.split(''); 4 var vowelArr = ['a', 'e', 'i', 'o', 'u']; 5 for (var i = 0; i < vowelArr.length; i++) { 6 if (letterArr.indexOf(vowelArr[i]) !== -1) { 7 var a = letterArr.indexOf(vowelArr[i]); 8 numArr.push(a); 9 } 10 } 11 var min = Math.min.apply(null, numArr); 12 if (min === 0) { 13 str = str.concat('way'); 14 } else { 15 var head = str.substr(0, min); 16 str = str.substr(min); 17 /* letterArr=str.split(''); 18 letterArr.push(headArr+'ay'); 19 str=letterArr.join(''); */ 20 str = str.concat(head + 'ay'); 21 } 22 return str; 23 } 24 translate("consonant");