मेरे पास एक ऑब्जेक्ट है जिसमें सरल एन्कोडिंग/डिकोडिंग के लिए प्रतिस्थापन मूल्यों के जोड़े हैं (सुरक्षा के लिए नहीं, केवल सुविधा के लिए; यहां सभी को समझाने के लिए बहुत जटिल)। यहजावास्क्रिप्ट: ऑब्जेक्ट में त्वरित रूप से लुकअप मान (जैसे हम गुणों के साथ कर सकते हैं)
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]
कर सकता हूं।
हां! यदि मैं कर सकता था, तो मैं आपको दो बार ऊपर उठाना चाहता था, क्योंकि यह दोनों में सुझाए गए सुधारों को जोड़ता है। यह निश्चित रूप से मेरा स्वीकार्य उत्तर है (किसी भी अन्य अद्भुत संस्करण को छोड़कर ...)। धन्यवाद! –