如何使Array中的元素改变它的位置

问题描述 投票:0回答:3

我是JS的初学者。我试过去了解Caesar Cipher ROT13,但这对我来说太复杂了。所以我试着编写自己的代码。它在下面:

function encrip() {
  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 str = "Ni Hao"; 
  var string = str.toUpperCase();
    for (var i = 0; i < string.length; i++) {
        for (var k = 0; k < alphabet.length; k++) {
            if(string.charAt(i) == alphabet[k]) {
         /* console.log(string.charAt(i) + ' ' + alphabet.indexOf(alphabet[k])); */
        }
        }
    }
}
encrip();

但我被卡住了。怎么做:

1.从var str中获取值,然后访问var alphabet,将var str值中的每个字母从字母表更改为next 3(var str每个元素的当前位置将被更改)例如:Input: Ni Hao ==> output: QL KDR

2.创建通用代码,我的意思是,不仅要将位置改为3,而且当我给出值'5'时,每个元素将被字母表中的下5个位置改变。因此,当我更改其值时,可以更改输出

我希望我能清楚地解释一切。提前感谢大家的帮助!!

javascript arrays caesar-cipher
3个回答
0
投票

您可以使用以下函数来加密英语单词,第一个参数是要加密的字符串,第二个参数用于转换

function encryp(str,pos){
   var alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
   var strUC=str.toUpperCase();
   var enc="";
    for(var i=0;i<strUC.length;i++){
    if(strUC.charAt(i)!=" "){
    enc+=alpha.charAt((alpha.indexOf(strUC.charAt(i))+pos)%26)
     }
  else{
   enc+=" "
     }
   // in your case pos=3
    }
    
    return enc;
    }
console.log(encryp("NiHao",3));

0
投票
  • 您不需要两个for循环来执行此操作。迭代输入string并找到alphabet数组中每个字符的索引,如果找到则将shift添加到它以获取加密字符。
  • 要处理溢出,请使用模数运算符循环遍历数组。此外,我假设您不会使用任何特殊符号进行加密。

function encrip(string, shift) {
  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"];
  string = string.toUpperCase();
  let arr = [];
    for (var i = 0; i < string.length; i++) {
       let char = alphabet.indexOf(string[i]) !== -1 ? alphabet[(alphabet.indexOf(string[i]) %26) + shift] : " ";
       arr.push(char);
    }
  let encryp = arr.join("");
  console.log(encryp);
  return encryp;
}
encrip("Ni Hao", 3);

-1
投票

首先,你可以使用内置函数for代替你的内部alphabet循环扫描整个indexOf数组:

alphabet.indexOf('K') // returns 10

其次,您需要在单独的变量中构建加密字符串。对于每个字母,在字母表中获取该字母的索引,将密码偏移参数添加到该索引,并将字母表中的结果字母添加到新字符串中。一个重要的步骤是,当您添加到字母的索引时,您希望确保结果索引在alphabet数组的范围内。您可以使用%(modulo)运算符来执行此操作,该运算符将高值包装回数组的开头。在全:

function encipher(input, offset) {
    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 str = input.toUpperCase();
    var result = '';

    for (var i = 0; i < str.length; i++) {
        letterIndex = alphabet.indexOf(str.charAt(i));
        if (letterIndex === -1) {
            result += str[i]; // if the letter isn't found in the alphabet, add it to the result unchanged
            continue;
        }

        cipheredIndex = (letterIndex + offset) % alphabet.length; // wrap index to length of alphabet
        result += alphabet[cipheredIndex];
    }

    console.log(result);
}

encipher('Ni Hao', 5); // output: 'SN MFT'
© www.soinside.com 2019 - 2024. All rights reserved.