JS字母加密程序,还有优化空间吗?

问题:
已知一个英文单词,英文单词中只包含大写字母“A—Z”与小写字母“a—z”。你的任务是将英文单词翻译成密码文。翻译规则是把所有字母用它后面的第三个字母替换,并假设字符a接在字符z后面,字符A接在字符Z后面。例如:zero将被翻译成chur。
输入与输出要求:
输入一个英文单词,每个英文单词长度不超过100,单词以回车换行符‘n’结束输入。输出对应字符串的密码文,占一行。
程序运行效果:
Sample 1:
zero
chur
Sample 2:
AZazbf
DCdcei

代码:
大概思路是:获取获取每个英文字符的ASC码值,向后加3位,超出范围的另外处理

<body>
<input type="text" id="letter" />
<button id="result">转换</button>
<script>
window.onload = function() {
    var letter = document.getElementById('letter');
    var result = document.getElementById('result');
    var upperMin = 65; //大写最小asc
    var upperMax = 90; //大写最大asc
    var lowerMin = 97; //小写最小asc
    var lowerMax = 122; //小写最大asc

    result.onclick = function() {
        var s = [];
        var letterStr = letter.value;
        if(!/[a-zA-Z]/.test(letterStr)) {
            alert('请输入大小英文字符');
            return;
        }
        for(var i=0; i<letterStr.length; i++) {
            var _code = letterStr[i].charCodeAt(); //获取每个字符的asc码
            var _move = _code+3; //向后移动3位

            //输入大写且asc大于90 或 输入小写且值大于122,均超出英文字符的范围,都减去23
            if((/[A-Z]/.test(letterStr[i])&&_move > upperMax) || (/[a-z]/.test(letterStr[i])&&_move > lowerMax)) {
                //超出最大asc,减去23
                _move = _code - 23;
            }

            s.push(String.fromCharCode(_move));
        }

        alert(s.join(''))
    }
}
</script>
</body>

除了这种实现方法,还有更好的方法实现吗?

阅读 3k
4 个回答

存在数组里面,循环移位就好了

var arr = Array(52)
for (let i = 0; i < 26; i++) {
  arr[i] = String.fromCharCode(i + 65)
  arr[i + 26] = String.fromCharCode(i + 97)
}

function encodeStr(s) {
  return s.replace(/[A-Za-z]/g, c => arr[(arr.indexOf(c) + 3) % 52])
}
除了ASCII码值来做,你该题已知范围 直接一个数组a~Z就好了 规则捋一下 如何取值就好了

每个字母转换结果都是固定的,(如果是以速度优化为目的)写个表就行了

const encrypt =(str)=>{
    const obj ={"a":"d","b":"e","c":"f","d":"g","e":"h","f":"i","g":"j","h":"k","i":"l","j":"m","k":"n","l":"o","m":"p","n":"q","o":"r","p":"s","q":"t","r":"u","s":"v","t":"w","u":"x","v":"y","w":"z","x":"a","y":"b","z":"c","A":"D","B":"E","C":"F","D":"G","E":"H","F":"I","G":"J","H":"K","I":"L","J":"M","K":"N","L":"O","M":"P","N":"Q","O":"R","P":"S","Q":"T","R":"U","S":"V","T":"W","U":"X","V":"Y","W":"Z","X":"A","Y":"B","Z":"C"}
    let res='';
    for(let i=0;i<str.length;i++){
        res+= obj[str[i]]
    }
    return res;
}
    

推荐问题