我破解了一个简单的解决方案,但在我看来它有点脏,所以我希望有人能向我展示一种更有效的方法来完成这个任务。
本质上,我只是试图使返回的字符串有效英语,通过将A转换为如果下一个单词以元音开头。
ie:
球是圆的 大象是灰色的
我这样做的方法是,每当我使用A的值并返回A或a时,只需要创建一个调用的函数。
function convertAorAn(val){
const letter = val.charAt(0).toLowerCase();
if(
letter === 'a' ||
letter === 'e' ||
letter === 'i' ||
letter === 'o' ||
letter === 'u'
) {
return "An"
} else {
return "A"
}
}并以下列方式使用:
{convertAorAn(value)} {value} is {otherValue}
为实现:
笔记本电脑很薄
或
短吻鳄是粗糙的
有比我编写的函数更好的方法来完成这个转换吗?
发布于 2020-02-04 22:13:25
你的密码没问题。当然,还有其他可能的解决办法。一种方法是用一个if替换switch
function convertAorAn(val){
switch (val.charAt(0).toLowerCase()) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return 'An';
default:
return 'A';
}
}另一种方法是使用includes,而不是单独检查每个字母:
function convertAorAn(val){
const letter = val.charAt(0).toLowerCase();
if ('aeiou'.includes(letter)) {
return 'An';
}
return 'A';
}最后,可以使用正则表达式来匹配val中的第一个字符。
function convertAorAn(val){
return /^[aeiou]/i.test(val) ? 'An' : 'A';
}最后,这真的是一个风格的问题,什么将是你和你的团队最易读的六个月以后。
发布于 2020-02-04 22:19:17
我没有看到这个,但它被提到了。
function convertAorAn(val){
s = new Set(['a','e', 'i', 'o', 'u'])
const letter = val.charAt(0).toLowerCase();
return s.has(letter) ? 'An' : 'A';
}发布于 2020-02-04 22:19:19
function convertAorAn(val){
return ['a', 'e', 'i', 'o', 'u'].some(currentVal => currentVal === val) ? 'An' : 'A';
}
let result1 = convertAorAn('a');
console.log(result1); // output => An
let result2 = convertAorAn('b');
console.log(result2); // output => A
您可以使用Array.some实现所需的结果。
参考资料:Array.some
https://stackoverflow.com/questions/60066199
复制相似问题