我正在尝试加密用户输入的单词,但它只加密该单词的最后一个字母。
换句话说,如果我输入abc
并点击按钮,浏览器将显示z
而不是xyz
。它忽略ab
的加密。
我做错了什么以及如何纠正这个问题?
import React, { Component } from 'react';
class Main extends Component {
constructor(props) {
super(props);
this.state = {
show: false,
encryptedValue: null
};
}
encrypt = () => {
let input = document.getElementById("inputText").value;
let encryptedValue;
let temp = "";
for(let i = 0; i < input.length; i++) {
temp += input[i];
switch(input[i].charAt(i)) {
case "a":
encryptedValue = "x";
break;
case "b":
encryptedValue = "y";
break;
case "c":
encryptedValue = "z";
break;
default:
encryptedValue = null;
}
}
document.getElementById("res").innerHTML = temp;
this.setState({show: true, encryptedValue: encryptedValue});
};
render() {
return(
<div>
<input type="text" placeholder="type something" id="inputText"/>
<button onClick={() => this.encrypt()}>Click to encrypt</button>
<h1 id="res">{this.state.encryptedValue}</h1>
</div>
);
}
}
export default Main;
最佳答案
在您的 switch
语句中,您不断将 encryptedValue
设置为一个全新的新值,而不是附加到您的之前的加密值
。对于abc
,它只会记住您加密的最后一个字符,因此是z
。
如果您想解决此问题,请将 =
更改为 +=
,以便它附加到 encryptedValue
而不是覆盖它。
您似乎正在切换 input[i].charAt(i)
,这会导致错误,因为 input[i]
已包含您要输入的字符想切换。
let input = "abc";
let encryptedValue = "";
for (let i = 0; i < input.length; i++) {
switch (input[i]) {
case "a":
encryptedValue += "x";
break;
case "b":
encryptedValue += "y";
break;
case "c":
encryptedValue += "z";
break;
default:
encryptedValue += "";
}
}
console.log(encryptedValue);
关于javascript - 我如何加密整个用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52956437/