यह होगा "काम"। (लेकिन मैं इसकी सलाह नहीं देते)
var a = {};
var b = [1,2,3];
a[b] = 'hello';
// a[b] evaluates to 'hello'
// a[[1,2,3]] evaluates to 'hello'
// a['1,2,3'] evaluates to 'hello'
यह काम करता है, क्योंकि जब आप हैश (मानचित्र/साहचर्य सरणी) कुंजी के रूप में सरणी [1,2,3] गुजरती हैं, स्ट्रिंग के लिए परिवर्तित किया जा रहा है ' हैश लुकअप करने से पहले 1,2,3 '। जब तक आपको विभिन्न हैश मानों को मैप करने के लिए समान मूल्य के दो अलग-अलग सरणी की आवश्यकता नहीं होती है, तब तक यह आपकी आवश्यकताओं के अनुरूप होना चाहिए।
var c = [1,2,3]
// a[c] evaluates to 'hello' even though we never executed a[c] = 'hello'
// but b == c evaluates to false
// b & c are two separate objects with the same values, so when they
// get converted to a string for hashing, they return the same value from the hash
के रूप में यह उल्लेख किया गया था, तो आप मानक जावास्क्रिप्ट हैश की तुलना में अधिक की आवश्यकता होगी आप अपने कुंजी के रूप में वस्तु संदर्भ का उपयोग करना चाहते हैं।
अद्यतन
@speedplane से टिप्पणी के आधार पर:
मुझे लगता है कि जे एस सरणी जब आप इसे एक हैश कुंजी में पारित पर toString()
कहता है। ताकि आप आसानी से परीक्षण कर सकते हैं क्या आप वास्तव में अपने कुंजी के रूप में प्राप्त करने के लिए जा रहे हैं:
["x", "y", "z"].toString; // 'x,y,z'
["x,y,z"].toString(); // 'x,y,z'
[1,2,3].toString(); // '1,2,3'
[1,2,'3'].toString(); // '1,2,3'
[[1],[2],[3]].toString(); // '1,2,3'
[["x",1], ["y",2], ["z",3]].toString(); // 'x,1,y,2,z,3'
तो फिर, मैं सुझाव है कि आप ऐसा नहीं करते हैं यह जब तक आप वास्तव में समझ में क्या चल रहा है। और फिर भी, मैं यह नहीं करूँगा।
क्या आपका मतलब है कि आप हैश में लुकअप के रूप में सरणी का उपयोग करना चाहते हैं? – alex
'प्रोग्राम' और' समय 'के संभावित मानों के आधार पर, शायद कुंजी के रूप में' [प्रोग्राम, समय] 'के स्ट्रिंग प्रस्तुति का उपयोग करने में कोई समस्या नहीं हो सकती है। चूंकि आप प्रॉपर्टी के रूप में उपयोग किए जाने वाले मान को स्वचालित रूप से स्ट्रिंग में परिवर्तित कर देते हैं, इसलिए उपयोग सरल होता है। –
जैसे रोब ने कहा, ** "program_time" ** की तरह कुंजी को कस्टम करें, और इसे अपने आप से संभाल लें – tym1193