这是针对我正在开发的软件的一个非常具体的问题。我创建并正在使用文本编码器,但是代码中存在一个小错误。
演示:https://dotjersh.github.io/sangwa/
如果我输入70
,它可以返回的值之一是F0
。
然而,当我解码 F0
时,结果是 7)
。
我已经用大量数据和不同的情况测试了代码,它适用于除此之外的所有其他场景。
代码:
var sangwa = {
array: "~!1@2#3$4%5^6&7*8(9)0_-=+ qQwWeErRtTyYuUiIoOpP[{]}\\|aAsSdDfFgGhHjJkKlL;:\"'zZxXcCvVbBnNmM,<.>/?",
key: function(value){
var a = this.array + this.array;
if(typeof value === "string"){
return this.array.indexOf(value);
} else if(typeof value === "number"){
if(value >= 0){
return a[value];
} else {
return a[this.array.length + value];
}
} else {
return this.array + this.array;
}
}
}
sangwa.encode = function(value){
var result = "";
var rand = Math.floor(Math.random() * 6) + 2;
value = "A" + value;
for(var i = 0; i < value.length; i++){
result += sangwa.key(sangwa.key(value[i]) + rand);
}
return result;
}
sangwa.decode = function(value){
var result = "";
var rand = parseInt(sangwa.key(value[0]) - sangwa.key("A"));
for(var i = 1; i < value.length; i++){
result += sangwa.key(sangwa.key(value[i]) - rand);
}
return result;
}
如果您想以这种方式建议更改,代码位于 github 上: https://github.com/dotjersh/sangwa/blob/master/sangwa.js
最佳答案
我可以看到一些错误:
- 您的“
数组
”包含两次空白。这就是"F0 "
未按预期解码的原因。事实上,使用rand=6
进行encode("70")
和encode("7)")
都会产生相同的结果,即使其不可能逆转。 - 考虑到有效输入的
value
始终为正,if(value >= 0)
区别毫无意义 - 您应该在索引上使用
% array.length
,而不是执行var a = this.array + this.array;
- 您应该编写两个单独的方法,而不是在
key
方法中切换value
的类型 decode
中的parseInt
毫无意义(如果不是错误的话),因为参数已经是一个整数了
关于javascript - 字符数组未正确获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42791259/