javascript - 查找与值相等的键不起作用

标签 javascript

好吧,有一天我坐在那儿思考“如果我在 JavaScript 中制作像 Base64 这样的自己的编码会怎么样?”然后我想到了创建一个库的想法,它允许您创建自己的编码,例如 Base64。这是我想出的代码:

var Zinc = Zinc || {};
Zinc.Encoding = function(name) {
    this.encodingName = name;
    this.conversionTable = {};
    this.addToTable = function(string, convertsTo) {
        this.conversionTable[string] = convertsTo;
    };
    this.removeFromTable = function(string) {
        delete this.conversionTable[string];
    };
    this.encode = function(string) {
        var len = string.length;
        var out = string.split("");
        for (var i = 0; i < out.length; i++) {
            out[i] = this.conversionTable[out[i]];
        }
        return out.join("");
    }
    this.decode = function(string) {
        var len = string.length;
        var dec = string.split("");
        var out = [];

        for (var i = 0; i < dec.length; i++) {
            out[i] = this.getTableKeyByValue(dec[i]);
        }

        return out.join("");
    }
    /* Used internally. */
    this.getTableKeyByValue = function(value) {
        for (var prop in this.conversionTable) {
            if (this.conversionTable.hasOwnProperty(prop)) {
                if (this[prop] === value)
                    return prop;
            }
        }
    };
}

window.Zinc = Zinc;

编码工作一切正常,试试这个:

var test = new Zinc.Encoding(); test.addToTable("j", "blah"); test.encode("j");

它输出:“blah”

尝试执行:test.decode("blah"),但它不会执行任何操作,并返回“”。 为什么要这样做,而不是在表对象中找到键并获取与值相等的名称,然后将值转为与值相等的名称。 (令人困惑,对吧?)

最佳答案

解码正在分解传入字符串的每个字符。也许您的意思是在单词边界上分割:

var conversionTable = {
  'j': 'blah'
};

function decode(string) {
  var len = string.length;
  var dec = string.split(/\b/);
  var out = [];

  for (var i = 0; i < dec.length; i++) {
    out[i] = this.getTableKeyByValue(dec[i]);
  }

  return out.join(" ");
};

function getTableKeyByValue(value) {
  for (var prop in conversionTable) {
    if (conversionTable.hasOwnProperty(prop)) {
      if (conversionTable[prop] === value)
        return prop;
    }
  }
};
console.log( decode('blah') );
console.log( decode('blah blah') );

关于javascript - 查找与值相等的键不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39237059/

相关文章:

javascript - 在prototypejs中找出一个对象的类

javascript - 具有相同选项的多个下拉菜单 : how to remove currently selected item of one dropdown from other dropdowns?

javascript - 同一字段中的数字和文本

Javascript:添加/减去元素的 'top' 属性?

javascript - 两个 HTML block 之间的差异 : structural instead of lines/chars?

javascript - ES6 Object.forOwn 循环对象键功能

closures - Javascript 模块使用 Apply 并返回 this

javascript - 错误类型错误 :Cannot read property 'forEach' of undefined in Angular

javascript - 屏幕刷新 jquery 适用于 PC 而不是服务器

javascript - Jquery 倒计时正在重复