2015-08-26 7 views
7

मुझे लुकअप के LOT निष्पादित करना है, जबकि xmlStream को पार्स करते समय मुझे कुछ टैग चाहिए या नहीं।जावास्क्रिप्ट: क्या लुकअप तेज़ है: array.index ऑब्जेक्ट हैश बनाम?

मैं इसे array.indexOf विधि (मेरे पास सरणी में लगभग 15 आइटम) या ऑब्जेक्ट [कुंजी] लुकअप का उपयोग कर कर सकता हूं।

दूसरा समाधान मेरे लिए सिद्धांत में अधिक कुशल लगता है, लेकिन मेरे कोड में अच्छी लाइन नहीं दिखता है। लेकिन अगर यह वास्तव में अधिक कुशल है, तो मैं इसे छोड़ दूंगा।

उदा .:

var tags = [ 
    'tag1', 
    'tag2', 
    'tag3', 
    ... 
]; 

var tags2 = { 
    'tag1' : null, 
    'tag2' : null, 
    'tag3' : null, 
} 

tags.indexOf(value) // exists? 
tags2[value] // exists? 
+3

अनुक्रमणिका ओएफ ओ (एन) हैश है ओ (1), afaik – elclanrs

+0

क्या आपने इसे आजमाया है? http://jsperf.com/ – Bergi

+3

https://jsperf.com/indexof-vs-hash –

उत्तर

5

खैर, प्रदर्शन अपने निर्धारित आकार और अपने पहुंच पद्धति पर निर्भर करता है। आम तौर पर, इंडेक्सऑफ ओ (एन) है और हैश ओ (1) है, हालांकि, चूंकि आपके पास सेट में केवल 15 आइटम हैं और मान लें कि प्रत्येक एक्सेस पूरी तरह से स्वतंत्र और equibrobable है, हैश का लाभ वास्तव में वहां नहीं है ।

5

ऑब्जेक्ट कुंजी लुकअप ऐरे की अनुक्रमणिका से अधिक तेज़ है। आप इसे jsperf पर देख सकते हैं।

टेस्ट परिणाम:

सरणी 10000 मदों की

सूचकांक: 26,547 संचालन/सेकंड
100000 मदों की सूचकांक: 2,493 संचालन/सेकंड

वस्तु

लुक कुंजी 10000 वस्तुओं में से: 152,115 संचालन/सेकंड
100000 वस्तुओं की लुकअप कुंजी: 150,450 ऑपरेशंस/सेक

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