Хорошо, поэтому я сидел один день, думая о том, «Что делать, если я делаю свою собственную кодировку как Base64 в JavaScript?» и затем я придумал идею создания библиотеки, которая позволяет вам создавать свою собственную кодировку, такую как 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")
, но он ничего не делает и возвращает "". Почему это делается вместо того, чтобы найти ключ в объекте таблицы и получить имя, равное значению, и превратить значение в имя, равное значению. (? Запутанные, справа)
Пожалуйста, сделайте [mcve] – zer00ne
У вас нет правильных разделителей, вы говорите, что 'j' равно' blah', а затем, когда вы кормите 'blah', вы просто разделите эту строку на' b', 'l',' a', 'h' и т. д., и ваша таблица преобразования не имеет ни одного из этих значений, она имеет только значение' blah', и если бы у вас было более одного значения, у вас не было бы способ узнать, где его разделить, поэтому вся концепция ошибочна. И ... это должно быть 'if (this.conversionTable [prop] === value) ...'. Почему бы просто не использовать обычный объект или B64 вместо – adeneo
Ваш метод кодирования не является обратимым. Предположим, что у вас есть 'a => p',' b => qr' и 'c => pqr'. Если вы хотите декодировать 'pqr', нет никакого способа узнать, было ли это изначально' ab' или 'c'. – Barmar