3 回答
TA贡献1858条经验 获得超8个赞
您可以检查字符是否是元音,然后从给定的字符串或实际字母中取出下一个字母。
function changeVowels(str) {
var alphabet = 'abefijopuvABEFIJOPUV';
var strNew = ""
for (var i = 0; i < str.length; i++) {
if ('aeiou'.includes(str[i].toLowerCase())) {
strNew += alphabet[alphabet.indexOf(str[i]) + 1];
} else {
strNew += str[i];
}
}
return strNew;
}
console.log(changeVowels('Car'))
TA贡献1906条经验 获得超3个赞
这是另一种有趣的方法
function changeVowels(str) {
var x = {a:'b', e:'f', i:'j', o: 'p', u: 'v', A: 'B', E: 'F', I: 'J', O: 'P', U: 'V'};
return str.split('').map(l => x[l] || l).join('');
}
console.log(changeVowels('Car'))
或者如果你真的想要那个alphabetvar
function changeVowels(str) {
var alphabet = 'abefijopuvABEFIJOPUV';
var x = Object.fromEntries(alphabet.match(/../g).map(kv => kv.split('')));
return str.split('').map(l => x[l] || l).join('');
}
console.log(changeVowels('Car'))
的解释 var x = Object.fromEntries(alphabet.match(/../g).map(kv => kv.split('')));
alphabet.match(/../g) 产生一个数组 ['ab', 'ef', 'ij', ... etc]
.map(kv => kv.split('')) 将上面的映射到 [['a', 'b'], ['e', 'f'], ... etc
Object.fromEntries([['a', 'b'], ['e', 'f'] .... etc]) 产生
{
a: 'b',
e: 'f',
i: 'j',
o: 'p',
u: 'v',
A: 'B',
E: 'F',
I: 'J',
O: 'P',
U: 'V'
};
与第一个片段相同
TA贡献1993条经验 获得超5个赞
您不需要循环来简化此代码
这两个str[i]==='a' || str[i]==='i' || str[i]==='u'||str[i]==='e' || str[i]==='o'和str[i]==='A' || str[i]==='I' || str[i]==='U'|| str[i]==='E' || str[i]==='O'大约相同的字母,但大小写不同,所以你可以只考虑一个情况下(上限或下限)和转换什么减少一半你的代码。如果提取str[i]为变量,则可以进一步减少重复:
var char = str[i].toUpperCase();
/* ... */
if (char==='A' || char==='I' || char==='U'|| char==='E' || char==='O') {}
如果您使用数组和Array#includes或者String#includes将执行相同的操作,则可以进一步减少多个 OR,但我将使用数组,因为它对值更通用,即使字符串会更短。
if (['A', 'I', 'U', 'E', 'O'].includes(char)) {
/* code */
} else {
strNew+=str[i];
}
如果你想在第一种情况下什么都不做,你可以else通过反转条件来进一步消除:
if (!['A', 'I', 'U', 'E', 'O'].includes(char)) {
// ^ invert the result
strNew+=str[i];
}
添加回答
举报