2010-09-26 16 views
5

मैं किसी सरणी ['red', 'green', 'blue']प्रोटोटाइप जावास्क्रिप्ट फ्रेमवर्क का उपयोग करके मैं ऐरे से हैश कैसे बना सकता हूं?

मैं इस सरणी से एक नया हैश बनाना चाहते है, परिणाम

{'red':true, 'green':true, 'blue':true} 

सबसे अच्छा तरीका है कि लक्ष्य प्रोटोटाइप का उपयोग कर प्राप्त करने के लिए क्या है होना चाहिए?

उत्तर

14

बस सरणी पर पुनरावृति और फिर हैश बनाने के लिए:

var obj = {}; 
for(var i = 0, l = colors.length; i < l; i++) { 
    obj[colors[i]] = true; 
} 
var hash = new Hash(obj); 

तुम भी शुरू से ही एक नया हैश वस्तु बना सकते हैं:

var hash = new Hash(); 
for(var i = 0, l = colors.length; i < l; i++) { 
    hash.set(colors[i], true); 
} 

मैं documentation पर एक नजर है करने के लिए सुझाव ।

+0

अलावा, स्ट्रिंग, संख्याओं, बूलियन्स, आदि –

+1

@Marcel की तरह: मैं नहीं कर रहा हूँ काफी यकीन है कि इन्हें आंतरिक रूप से कैसे संभाला जाता है लेकिन मुझे लगता है कि वे वस्तुएं भी हैं। –

+2

मुझे यह भी यकीन नहीं है कि जेएस इंजन आंतरिक रूप से उनको कैसे संभालते हैं, लेकिन स्ट्रिंग्स, संख्याएं और बूलियन निश्चित रूप से [ईसीएमएस्क्रिप्ट विनिर्देश] (http://ecma262-5.com/ELS5_Section_8.htm#Section_8) के अनुसार ऑब्जेक्ट्स नहीं हैं। उदाहरण के लिए, 'स्ट्रिंग' विधियों का उपयोग करते समय, एक स्ट्रिंग आदिम अस्थायी रूप से किसी ऑब्जेक्ट में परिवर्तित हो जाता है, विधि को कॉल किया जाता है और 'स्ट्रिंग' ऑब्जेक्ट को स्ट्रिंग आदिम में परिवर्तित कर दिया जाता है। यह भी ध्यान दें कि सभी वस्तुओं को 'सत्य' का मूल्यांकन करना चाहिए, जबकि प्राथमिकताएं 'झूठी' का मूल्यांकन कर सकती हैं। उदा। 'Var yes = नया बूलियन (झूठा); अगर (हाँ) चेतावनी ("मैं <3 जावास्क्रिप्ट"); 'आउटपुट' I <3 जावास्क्रिप्ट ' –

0

धन्यवाद सभी

यहाँ

है prototypejs और प्रेरित उपयोग करते हुए मेरे समाधान फेलिक्स के जवाब से

var hash = new Hash(); 
colors.each(function(color) { 
    hash.set(color, true); 
}); 
8

इस कार्यात्मक जावास्क्रिप्ट समाधान Array.prototype.reduce() उपयोग करता है:

['red', 'green', 'blue'] 
.reduce((hash, elem) => { hash[elem] = true; return hash }, {}) 

Parameter Details:

  • कॉलबैक - सरणी में प्रत्येक मान पर निष्पादित करने के लिए फ़ंक्शन।
  • प्रारंभिक वैल्यू - कॉलबैक की पहली कॉल के पहले तर्क के रूप में उपयोग करने के लिए ऑब्जेक्ट।

कॉलबैक के लिए तीसरा तर्क सरणी में संसाधित वर्तमान तत्व की अनुक्रमणिका है। तो अगर आप अपने सूचकांक के तत्वों का एक लुकअप तालिका बनाना चाहता था:

['red', 'green', 'blue'].reduce(
    (hash, elem, index) => { 
    hash[elem] = index++; 
    return hash 
    }, {}); 

रिटर्न:

Object {red: 0, green: 1, blue: 2} 
पुरातन से
+0

यदि यह आपके लिए काम नहीं कर रहा है तो सुनिश्चित करें कि आपने अंतिम पैरामीटर - ', {}' को नहीं भूलया है। इसके बिना आपको केवल पहला मूल्य मिलता है। –

संबंधित मुद्दे