좋아, 그래서 언젠가 "내가 Base64와 같은 인코딩을 자바 스크립트로 만들면 어떨까요?"라고 생각했습니다. 그런 다음 Base64와 같은 고유 한 인코딩을 만들 수있는 라이브러리를 만드는 아이디어를 생각해 냈습니다. 이것이 내가 생각 해낸 코드입니다 :값이 작동하지 않는 키 찾기
var test = new Zinc.Encoding(); test.addToTable("j", "blah"); test.encode("j");
을 그리고 출력 :
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;
인코딩 작품과 모든, 그냥이 시도 "blah"
을.
시도 : test.decode("blah")
,하지만 아무 것도하지 않으며 ""을 반환합니다. 테이블 개체에서 키를 찾아 값과 동일한 이름을 얻는 대신 왜이 작업을 수행하고 값을 값과 동일한 이름으로 바꿉니다. (? 혼란, 오른쪽)
A [mcve]을 확인하시기 바랍니다 – zer00ne
당신은 적절한 delimeter를 가지고 있지 않습니다. 당신은'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