我有一个对象,它有一对用于简单编码/解码的替换值(不是为了安全,只是为了方便;这里解释得太复杂了)。它的形式
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]
。