javascript - 字符数组未正确获取值

标签 javascript

这是针对我正在开发的软件的一个非常具体的问题。我创建并正在使用文本编码器,但是代码中存在一个小错误。

演示: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/

相关文章:

Javascript forEach 作为特殊变量

javascript - 使用对象属性在 for 循环中声明变量

javascript - Lodash 将对象添加到已排序的对象数组

javascript - Vue 组合 API : Is there a better way in calling `emit` inside consumable file?

javascript - 在 React 应用程序中使用 Webpackresolve.alias 进行绝对导入

javascript - 拆分数组中的字符串

javascript - 多选选项隐藏在其下方的 div 后面

javascript - 我有一个大图像,但我需要使用相同的图像,只是大小的一半并保持图像质量

javascript - 如何等到数据加载到 AngularJS 中?

javascript - innerHTML 基础,在循环中添加数字