単純なエンコード/デコードに使用される置換値のペアを持つオブジェクトがあります(セキュリティのためではなく、便宜上です。ここですべてを説明するには複雑すぎます)。それは形になっています
var obj = {x: y,
x: y,
...
};
ここで、「x」はエンコードされたときの値であり、「y」はデコードされた値です。
デコードは簡単です。文字列の文字をループし、charAt(i)
括弧を介してオブジェクトの値を検索しますobj[ str.charAt(i) ]
。(大文字または小文字のバージョンが必要かどうかを確認するためのチェックを省略しています(オブジェクト内のすべてのキー/値は小文字です)が、それは十分に単純です。)
もちろん、エンコードするには、プロパティではなく、オブジェクト内の値を探す必要があります。現在、ループを使用してプロパティをfor ... in ...
ループし、値を値と照合していcharAt(i)
ます。私の現在のコードは次のとおりです。
var i, j,
output = '',
str = 'Hello World!',
obj = {'s':'d',
'm':'e',
'e':'h',
'x':'l',
'z':'o',
'i':'r',
'a':'w',
'o':'!',
'-':' '};
for (i = 0; i < str.length; i++) {
for (j in obj) {
if (Object.prototype.hasOwnProperty.call(obj, j) &&
Object.prototype.propertyIsEnumerable.call(obj, j)) {
if (obj[j] === str.charAt(i)) {
output += j;
break;
} else if (obj[j].toUpperCase() === str.charAt(i)) {
output += j.toUpperCase();
break;
}
}
}
}
alert(output);
私は本質的に、これを行うためのより効率的な方法があるべきだと感じています。(もちろん、逆のオブジェクト{y:x}を持つことはオプションですが、良い方法ではありません。)これが最善の方法ですか、それとももっと良い方法がありますか?本質的には、私とvar prop = obj[value]
同じようにできることを望んでいますvar value = obj[prop]
。