9

Kalıcı veri yapıları ile fonksiyonel bir kütüphane arıyorum. Sadece iç içe dizilere ve sözlüklere ihtiyacım var. Bazı functional javascript libraries vardır, ancak bunlar değişmezliğe yönelik değildir. Ben underscore bazı durumlarda yakın geliyor olsa da, özellikle diziler,Kalıcı veri yapıları ile Javascript işlevsel kütüphanesi

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 

yazabilmek istiyorum, sözlük argümanları değiştirir. clojurescript'u da kullanabilirim, ama daha hafif bir yaklaşım tercih ederim.

+2

@FlavioCysne Sadece ona bir göz vardı ve benim soruya ilişkin nasıl göremez. –

+0

sadece açıklığa kavuşturmak için (çünkü şu anda oldukça benzer bir şey üzerinde çalışıyorum), sonuçlanan kalıcı haritanın "." Dahil bir yerel nesne gibi davranmasına ihtiyacınız var mı? erişim? Bu, ya alıcıları kullanarak simüle etmeyi veya tüm yapının modifikasyondan kopyalanmasını ve dondurulmasını gerektirecektir. Bu, büyük düz haritalar için oldukça hızlı bir şekilde verimsiz hale gelir (ve her ikisi de ES5 gerektirir) ... ya da içeriğe erişen işlevler/yöntemler ile iyi misiniz? (benim yaklaşımım)? –

+0

Doküman erişim çözümüyle birlikte, en dezavantajlarını görebiliyordum. Zaten büyük haritalarım yok. ES5 gereksinimi ... iyi, fonksiyon erişim yaklaşımınızı düşüneceğim. –

cevap

3

Kalıcı bir talebe rağmen, Kalıcı Haritanın uygulanmasını (ve yakında Kalıcı Vektör'ü yakında bitirecek) JavaScript için sonlandırdım.

Örneğe kıyasla birkaç özellik vardır. Java (eşittir olmaması, hashCode güvenmek için), bu nedenle uygulama sıralı dengeli ikili ağaç kullanır (dengeleme aslında basitleştirilir ve değişmezlik ile hızlandırılır) ve === eşitlik ve < veya özel işlevden daha düşüktür.

Feat.js (proje kodu adı) kod Sen Şu feat.js at cofylang.org

online eylem testler çalışma içeren bir sayfa görebilirsiniz feat-sorted-map.js at github.com

mevcuttur

kaynağında dışında hiçbir belge yoktur kod ve testler, ama aynı zamanda bitirme üzerinde çalışıyorum.

Güncelleme: Orada daimi bir vektörün uygulanması da var ve hız büyüklük sıralarında geliştirildi. (Bu temizlenmiş oldu yanı) feat-vector.js at github.com

+1

Etkileyici görünüyor, teşekkürler JJ ' –

+0

Kodun ne kadar küçük olduğunu seviyorum. –

+0

@jJ, hızlandırmak için ne yaptın? – Scott

8

Mori'ye bir göz atabilirim. Düz eski Javascript'ten kullanılmak üzere ClojureScript'in işlevsel veri yapısını paketler. Veri yapıları ClojureScript'ten geldiğinden, daha iyi test edilmelerini, diğer kütüphanelerden daha eksiksiz ve daha performanslı olmalarını beklerdim.

https://github.com/swannodette/mori

İlgili konular