2016-08-30 2 views
0

좋아, 그래서 언젠가 "내가 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"),하지만 아무 것도하지 않으며 ""을 반환합니다. 테이블 개체에서 키를 찾아 값과 동일한 이름을 얻는 대신 왜이 작업을 수행하고 값을 값과 동일한 이름으로 바꿉니다. (? 혼란, 오른쪽)

+0

A [mcve]을 확인하시기 바랍니다 – zer00ne

+1

당신은 적절한 delimeter를 가지고 있지 않습니다. 당신은'j'가'blah'와 같다고 말하고,'blah'를 먹이면 그 문자열을'b','l', a', 'h' 등등 당신의 변환 테이블은 그 값들 중 하나를 가지고 있지 않다. 단지'blah'의 값을 가지고 있고, 거기에 하나 이상의 값이 있다면 당신은 아무 것도 가질 수 없다. 방법을 분할하는 방법을 알기 때문에 전체 개념에 결함이 있습니다. 그리고 ... 그것은 if (this.conversionTable [prop] === value) ... '이어야합니다. 왜 그냥 일반 오브젝트 나 B64를 사용하지 마십시오 – adeneo

+0

인코딩 방법은 되돌릴 수 없습니다. 'a => p','b => qr','c => pqr'라고합시다. 'pqr'을 해독하려면 원래'ab' 또는'c'인지 알 수있는 방법이 없습니다. – Barmar

답변

1

디코드에 전달 된 문자열의 각 문자를 깨는 어쩌면 당신은 대신에 단어 경계에 분할하는 말은 :.

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'));

+0

음 ...이 코드에 대해 아프다. –

관련 문제