Javascript 简化长开关语句
我需要温习一下我的javascript,因为它是我最薄弱的语言,所以我想“嘿,让我们制作一个简单的‘翻译’程序来测试我的技能”。到目前为止,我能够让它以一种方式进行翻译(我还没有对人们输入的东西进行反翻译),但无论如何,它是通过一个开关内的一系列案例来实现的。我想知道是否有任何方式我可以简化代码,而不是有一百万开关情况。谢谢,这是我的密码Javascript 简化长开关语句,javascript,Javascript,我需要温习一下我的javascript,因为它是我最薄弱的语言,所以我想“嘿,让我们制作一个简单的‘翻译’程序来测试我的技能”。到目前为止,我能够让它以一种方式进行翻译(我还没有对人们输入的东西进行反翻译),但无论如何,它是通过一个开关内的一系列案例来实现的。我想知道是否有任何方式我可以简化代码,而不是有一百万开关情况。谢谢,这是我的密码 function main() { var get = prompt("Enter what you would like to en
function main() {
var get = prompt("Enter what you would like to encode!","At the current time decoding is still a WIP").toLowerCase();
var ina = [...get];
for(i = 0; i < ina.length; i++) {
switch(ina[i]) {
case "a":
ina[i] = "z";
break;
case "b":
ina[i] = "y";
break;
case "c":
ina[i] = "x";
break;
case "d":
ina[i] = "w";
break;
case "e":
ina[i] = "v";
break;
case "f":
ina[i] = "u";
break;
case "g":
ina[i] = "t";
break;
case "h":
ina[i] = "s";
break;
case "i":
ina[i] = "r";
break;
case "j":
ina[i] = "q";
break;
case "k":
ina[i] = "p";
break;
case "l":
ina[i] = "o";
break;
case "m":
ina[i] = "n";
break;
case "n":
ina[i] = "m";
break;
case "o":
ina[i] = "l";
break;
case "p":
ina[i] = "k";
break;
case "q":
ina[i] = "j";
break;
case "r":
ina[i] = "i";
break;
case "s":
ina[i] = "h";
break;
case "t":
ina[i] = "g";
break;
case "u":
ina[i] = "f";
break;
case "v":
ina[i] = "e";
break;
case "w":
ina[i] = "d";
break;
case "x":
ina[i] = "c";
break;
case "y":
ina[i] = "b";
break;
case "z":
ina[i] = "a";
break;
default:
ina[i] = ina[i]
};
};
var outa = ina.join("");
document.getElementById("output").innerHTML = outa;
};
函数main(){
var get=prompt(“输入您要编码的内容!”,“当前解码仍然是WIP”).toLowerCase();
var ina=[…获取];
对于(i=0;i
您可以使用具有以下属性的对象
{
a: 'z',
b: 'y',
c: 'x',
// ...
z: 'a'
}
默认值为ina[i]
的用法
ina[i] = object[ina[i]] || ina[i];
可以使用两个字符串变量来映射字母
function translateLetter(input) {
const untranslated = "abcdefghijklmnopqrstuvwxyz";
const translated = "zyxwvutsrqponmlkjihgfedcba";
var i = untranslated.indexOf(input);
return translated[i];
}
您正在使用的
开关
具有可以通过简单的数学直接实现的逻辑,而不需要开关
(我认为大多数现代JS解释器都应该JIT掉实际的方法调用,如果这是一个热循环,那么成本应该很低):
var get=prompt(“输入您想要编码的内容!”,“当前解码仍然是WIP”).toLowerCase();
var ina=[…获取];
对于(i=0;i 如果(97只需计算ASCII字符代码:
function main() {
var get = prompt("Enter what you would like to encode!","At the current time decoding is still a WIP").toLowerCase();
var ina = [...get];
for (i = 0; i < get.length; i++) {
var charNum = get.charCodeAt(i) - 96;
if (charNum > 0 && charNum < 27) {
ina[i] = String.fromCharCode((27 - charNum) + 96);
}
};
var outa = ina.join("");
document.getElementById("output").innerHTML = outa;
};
函数main(){
var get=prompt(“输入您要编码的内容!”,“当前解码仍然是WIP”).toLowerCase();
var ina=[…获取];
对于(i=0;i0&&charNum<27){
ina[i]=String.fromCharCode((27-charNum)+96);
}
};
var outa=ina.join(“”);
document.getElementById(“输出”).innerHTML=outa;
};
这要视情况而定,是否存在一致性?例如,似乎您正在向后翻译同一个字母表,仅使用一个字符数组和使用长度等可能会容易得多。但对于其他模式,这可能不起作用,因此您希望仅此模式有一些内容,还是希望以更简单的方式编写sw总体而言,瘙痒(实际上没有)。如果您有需要改进的工作代码,您也可以继续询问。它们将帮助您改进代码的各个方面。您需要确保您处理了输入不在未翻译状态下的情况;按原样,您将返回所有这些状态的未定义状态。这还包括对每个字符进行线性扫描;诚然,这是必要的很可能JIT会调用memchr
之类的调用,速度相当快,但是您可以直接计算索引,而无需扫描。计算v.扫描——性能v.可扩展性的经典案例。至少我没有让它调用服务。
function main() {
var get = prompt("Enter what you would like to encode!","At the current time decoding is still a WIP").toLowerCase();
var ina = [...get];
for (i = 0; i < get.length; i++) {
var charNum = get.charCodeAt(i) - 96;
if (charNum > 0 && charNum < 27) {
ina[i] = String.fromCharCode((27 - charNum) + 96);
}
};
var outa = ina.join("");
document.getElementById("output").innerHTML = outa;
};