स्वयं डेटा संरचना बनाएं। ऑर्डर को उस सरणी में संग्रहीत करें जो संरचना के लिए आंतरिक है। एक नियमित वस्तु में कुंजी द्वारा मैप किए गए ऑब्जेक्ट्स को स्टोर करें। आइए इसे OrderedMap
पर कॉल करें जिसमें एक नक्शा, एक सरणी और चार मूलभूत विधियां होंगी।
OrderedMap
map
_array
set(key, value)
get(key)
remove(key)
forEach(fn)
function OrderedMap() {
this.map = {};
this._array = [];
}
कोई तत्व डालने पर, वांछित स्थिति के साथ-साथ ऑब्जेक्ट में सरणी में जोड़ें। इंडेक्स या अंत में सम्मिलन ओ (1) में है।
OrderedMap.prototype.set = function(key, value) {
// key already exists, replace value
if(key in this.map) {
this.map[key] = value;
}
// insert new key and value
else {
this._array.push(key);
this.map[key] = value;
}
};
किसी ऑब्जेक्ट को हटाने पर, इसे सरणी और ऑब्जेक्ट से हटा दें। यदि किसी कुंजी या मूल्य से हटाना, जटिलता ओ (एन) है क्योंकि आपको ऑर्डर करने के लिए आंतरिक सरणी को पार करने की आवश्यकता होगी। इंडेक्स द्वारा हटाए जाने पर, जटिलता ओ (1) है क्योंकि आपके पास सरणी और ऑब्जेक्ट दोनों में मान तक सीधे पहुंच है।
OrderedMap.prototype.remove = function(key) {
var index = this._array.indexOf(key);
if(index == -1) {
throw new Error('key does not exist');
}
this._array.splice(index, 1);
delete this.map[key];
};
लुकअप ओ (1) में होगा। एसोसिएटिव सरणी (ऑब्जेक्ट) से कुंजी द्वारा मान पुनर्प्राप्त करें।
OrderedMap.prototype.get = function(key) {
return this.map[key];
};
ट्रैवर्सल का आदेश दिया जाएगा और दृष्टिकोणों का उपयोग कर सकते हैं। जब ट्रैवर्सल का आदेश दिया जाता है, तो वस्तुओं के साथ एक सरणी बनाएं (केवल मान) और इसे वापस कर दें। एक सरणी होने के नाते, यह कुंजी की पहुंच का समर्थन नहीं करेगा। दूसरा विकल्प क्लाइंट से कॉलबैक फ़ंक्शन प्रदान करने के लिए कहना है जिसे सरणी में प्रत्येक ऑब्जेक्ट पर लागू किया जाना चाहिए।
OrderedMap.prototype.forEach = function(f) {
var key, value;
for(var i = 0; i < this._array.length; i++) {
key = this._array[i];
value = this.map[key];
f(key, value);
}
};
इस तरह के एक वर्ग के लिए दस्तावेज और स्रोत के लिए बंद लाइब्रेरी के किसी LinkedMap की Google के क्रियान्वयन देखें।
ध्यान दें, जावास्क्रिप्ट एक देशी 'Map' अब जो पाशन आदेश दिया गया है। –