2016-08-30 6 views
0

まあまあ、私はいつも「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")、それは何もしませんし、 ""を返します。 テーブルオブジェクト内のキーを見つけて値と等しい名前を取得する代わりに、これを行う理由は、値を値と等しい名前に変換することです。 (?混乱、右)

+0

[MCVE]を行ってください – zer00ne

+1

あなたは適切な区切り文字を持っていません。あなたは '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

うーん...このコードについて見ていない –

関連する問題