是否有更有效/简洁/雄辩的方式来写这个:
else if ((aInd === 3)||(aInd === 7)||(aInd === 9)||(aInd === 19)
letter = alphabet[aInd + 1].toUpperCase();
是否有任何看似
的有效语法if (a === (3 || 7 || 13 || 19) {do this}
...或者让你用一个比一堆布尔表达式更简洁的方式为单个变量分组值逻辑?
背景:新手程序员,通过对coderbyte的基本密码挑战,如果字母是元音,则需要采取某种行动(大写)。出于简单的原因(因为它在程序的其他地方使用)我声明了一个数组字母表,其中包含字符串形式的每个字母a-z。 ' cypher'还将每个字母转换为右边的字母,因此字母的字母索引成为元音的是3,7,13和19.aInd表示字母表中的字母索引。
完整代码:
function letterChanges(str) {
var alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
var words = str.toLowerCase().split(' '), senArray = words.map(function(word) {return word.split('')});
senArray.forEach(function(word) {
word = word.filter(function(letter, index, word) {
if ((Boolean(alphabet.indexOf(letter))) === false) return false;
else return true;
});
});
senArray[0].map(function(letter) {
var aInd = alphabet.indexOf(letter);
switch (aInd) {
case 25:
letter = alphabet[aInd].toUpperCase();
break;
case (3 || 7 || 13 || 19):
letter = alphabet[aInd + 1].toUpperCase();
console.log(letter);
break;
default:
letter = alphabet[aInd + 1];
break;
}
return letter;
})
return senArray.map(function(word) {
return word.map(function(letter) {
var aInd = alphabet.indexOf(letter);
if (aInd === 25) {letter = alphabet[aInd].toUpperCase();}
else if ((aInd === 3)||(aInd === 7)||(aInd === 13)||(aInd === 19)) {letter = alphabet[aInd + 1].toUpperCase();}
else {letter = alphabet[aInd + 1];}
return letter;
}).join('');
}).join(' ');
}
letterChanges("Input string goes here.");

答案 0 :(得分:0)
将值作为数组传递并检查indexOf
。
在你的情况下,
if ([3, 7, 13, 19].indexOf(aInd) > -1) {
letter = alphabet[aInd + 1].toUpperCase();
}