javascript - 我可以将排列位置的值与空白进行比较吗?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);
}
解决方案
这个循环有永远运行的风险:
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 + " ";
}
推荐阅读
- parsing - Arduino通过以太网解析UDP数据包,其中包含乱码
- asp.net-core - Asp.net core 3.1 windows 身份验证和授权类似于 asp.net 4.x web.config 角色
- sql - 在项目持续时间 30 分钟后移除项目
- next.js - 如何将 next.js 博客上传到 ghost
- location - 给定一段文本标记位置文本
- python - 我如何使图像移动?
- html - 获取范围句柄的 x 和 y 位置
- c# - 在 Xamarin 表单中显示数据列表
- reactjs - React 从单个数组创建 2D 数组
- sql - 如何从SQL中的两列之一中获取与过滤不同的值