首页 > 解决方案 > 我可以将排列位置的值与空白进行比较吗?Javascript

问题描述

这是我的问题。我正在制作一个小型加密器,所以首先,我必须在每个字符的数组中保留一个字符串,包括空格,以便将每个原始字母替换为后面的字母,但我必须尊重空格每个单词之间的空白返回新字符串。因此,当我处于值得留出空格的排列位置时,我将其与连接该空格进行比较,这仅在我有两个单词 ex 时才有效。(嘿你)但如果我有两个以上的 ex(嘿你等一下)程序没有给我任何结果。应该是加密的:(ifz zpv xbju)。

这是我的代码的一部分:

const mensaje = {
    mensajeLimpio : '', 
    encriptado : '',
    desencriptado : '',
};

//Arreglo para recorrer el abecedario con respecto al string dado
var arregloAbecedario = ['a','b','c','d','e','f','g','h','i','j','k','l','m','ñ','o',
                        'p','q','r','s','t','u','v','w','x','y','z']; 

function encriptar(){
    var arregloCaracteres = [];
    var cadena = '';
    var input = document.getElementById('input').value;
    //Quitamos caracteres especiales como (?!#)
    input = input.replace(/[^a-zA-Z ]/g, "");
    //Quitamos acentos 
    input = input.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
    //Se guarda el mensaje limpio, sin caracteres especiales, solo caracteres.
    mensaje.mensajeLimpio = input;
    arregloCaracteres = input.toLowerCase().split("");
    for( var i=0; i<arregloCaracteres.length ;i++){
        var r = 0;
        //Validamos espacios en blanco
        if (arregloCaracteres[i] === " "){
            cadena = cadena + " ";
        }
        else{
            //Validamos posición actual con respecto a la del arreglo del abecedario, recorremos
            while(arregloCaracteres[i]!==arregloAbecedario[r]){
                r++;
            }
            //Hasta que es igual, guardamos la posicion actual y sumamos uno a su posición en el abecedario
            if(arregloCaracteres[i] === 'z'){
                cadena = cadena + arregloAbecedario[0];
            }
            else{
                cadena = cadena + arregloAbecedario[r+1]; 
            }
        }
    }
    mensaje.encriptado = cadena;
    console.log("Mensaje original: "+mensaje.mensajeLimpio);
    console.log("encriptado: "+mensaje.encriptado);
}

标签: javascriptarrays

解决方案


这个循环有永远运行的风险:

        while(arregloCaracteres[i]!==arregloAbecedario[r]){
            r++;
        }

例如,当您的输入包含纯字母“n”时会发生这种情况,而arregloAbecedario.

indexOf如果未找到索引,请改为使用并在结果中添加一个空格:

        var r = arregloAbecedario[r].indexOf(arregloCaracteres[i]);
        if (r >= 0) {
            if(arregloCaracteres[i] === 'z'){
                cadena = cadena + arregloAbecedario[0];
            }
            else{
                cadena = cadena + arregloAbecedario[r+1]; 
            }
        } else {
            cadena = cadena + " ";
        }

请注意,您不应使代码依赖于“z”作为列表中的最后一个字符。而是使用模逻辑:

        var r = arregloAbecedario[r].indexOf(arregloCaracteres[i]);
        if (r >= 0) {
            cadena = cadena + arregloAbecedario[(r+1) % arregloCaracteres.length];
        } else {
            cadena = cadena + " ";
        }

推荐阅读