好吧,有一天我坐在那儿思考“如果我在 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/