9

मैं लगातार डेटा संरचनाओं के साथ एक कार्यात्मक पुस्तकालय की तलाश में हूं। मुझे केवल घोंसला वाले सरणी और शब्दकोश की आवश्यकता है। कुछ functional javascript libraries हैं, लेकिन वे अपरिवर्तनीयता की दिशा में तैयार नहीं हैं। मैंलगातार डेटा संरचनाओं के साथ जावास्क्रिप्ट कार्यात्मक लाइब्रेरी

var dict = makeDictionary({ 
    'foo': 1; 
    'bar': { 
    'ely': 2; 
    } 
}); 
var newDict = dict.assoc('foo', 42).assoc('bar', 'tender', 30).dissoc('bar', 'ely'); 
assert.eq dict.bar.ely, 2; // unchanged 
assert.eq newDict.bar.tender, 30; // added 
assert.eq newDict.bar.ely, undefined; // removed 

लिखने के underscore कुछ मामलों में करीब आता है, विशेष रूप से सरणियों के साथ सक्षम होना चाहते हैं, यह तर्क शब्दकोश संशोधित करता है। मैं clojurescript का भी उपयोग कर सकता हूं, लेकिन मैं अधिक हल्के वजन दृष्टिकोण पसंद करूंगा।

+2

@FlavioCysne मैं सिर्फ यह पर एक नज़र था और नहीं देख सकते हैं कि यह मेरे सवाल से संबंधित है। –

+0

बस स्पष्ट करने के लिए (क्योंकि मैं वर्तमान में कुछ समान पर काम कर रहा हूं), क्या आपको परिणामी लगातार नक्शा की आवश्यकता है जिसमें मूल वस्तु के रूप में व्यवहार किया जाता है। " पहुंच? इसके लिए गेटर्स का उपयोग करके सिमुलेटिंग की आवश्यकता होगी, या पूरी संरचना को संशोधित करने और इसे ठंडा करने की आवश्यकता होगी, जो कि बड़े फ्लैट मैप्स के लिए काफी तेज़ी से अक्षम हो जाते हैं (और दोनों को ईएस 5 की आवश्यकता होती है) ... या आप सामग्री तक पहुंचने वाले कार्यों/विधियों के साथ ठीक हैं (मेरा दृष्टिकोण)? –

+0

हालांकि, मैं इसके दोषों को देखते हुए, दस्तावेज़-पहुंच समाधान के साथ सबसे खुश हूं। मेरे पास वैसे भी विशाल मानचित्र नहीं हैं। ES5 आवश्यकता ... अच्छा, मैं आपके फ़ंक्शन-एक्सेस दृष्टिकोण के बारे में सोचने जा रहा हूं। –

उत्तर

3

मैंने जावास्क्रिप्ट के लिए निरंतर मानचित्र के कार्यान्वयन को अंतिम रूप दिया (और जल्द ही लगातार वेक्टर खत्म कर देगा), क्योंकि वहां बढ़ती मांग प्रतीत होती है।

उदा। की तुलना में कई विशिष्टताएं हैं जावा (बराबर की कमी, हैशकोड पर भरोसा करने के लिए), इसलिए कार्यान्वयन संतुलित बाइनरी पेड़ को क्रमबद्ध करता है (संतुलन वास्तव में सरलीकृत होता है और अपरिवर्तनीयता से बढ़ाया जाता है) और === समानता के लिए और < या कम से कम के लिए कस्टम फ़ंक्शन।

Feat.js (परियोजना कोड नाम) के कोड feat-sorted-map.js at github.com

पर उपलब्ध है आप feat.js at cofylang.org

वर्तमान में ऑनलाइन कार्रवाई में परीक्षण काम कर के साथ एक पृष्ठ को देख सकते हैं, वहाँ स्रोत को छोड़कर कोई प्रलेखन है कोड और परीक्षण, लेकिन मैं इसे खत्म करने पर भी काम कर रहा हूं।

अद्यतन: वहां उपलब्ध एक सतत वेक्टर का कार्यान्वयन भी है, और परिमाण के क्रम में गति में सुधार हुआ है। (यह साफ-किया गया है के रूप में अच्छी तरह से) feat-vector.js at github.com

+1

प्रभावशाली लग रहा है, धन्यवाद @ जेजे ' –

+0

मुझे पसंद है कि कोड कितना छोटा है। –

+0

@jJ, आप इसे गति देने के लिए क्या किया? – Scott

0

वहाँ भी है:

https://github.com/hughfdjackson/immutable

कौन सा लगातार हैश trie एल्गोरिथ्म यहाँ पर आधारित है:

https://github.com/hughfdjackson/persistent-hash-trie

के लायक हो सकता है में देख।

इसके लिए कोड nicer imho है, लेकिन मेरे मानक यह दिखाते हैं कि यह ऊपर सूचीबद्ध एक की तुलना में धीमी गति के क्रम का लगभग एक क्रम चला रहा है।

8

मैं मोरी पर एक नज़र डालेगा। यह सादे पुराने जावास्क्रिप्ट से उपयोग के लिए क्लोजरस्क्रिप्ट की कार्यात्मक डेटा संरचना को संकुल करता है। चूंकि क्लोजरस्क्रिप्ट से डेटा संरचनाएं आ रही हैं, इसलिए मैं उनसे बेहतर परीक्षण, अधिक पूर्ण और अन्य पुस्तकालयों की तुलना में अधिक प्रदर्शन करने की अपेक्षा करता हूं।

https://github.com/swannodette/mori

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