9

Tôi đang tìm thư viện chức năng có cấu trúc dữ liệu liên tục. Tôi chỉ cần mảng lồng nhau và từ điển. Có một số functional javascript libraries, nhưng chúng không hướng đến bất biến. Tôi muốn có thể viếtThư viện chức năng Javascript với cấu trúc dữ liệu liên tục

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 

Trong khi underscore đến gần trong một số trường hợp, đặc biệt là với mảng, nó sửa đổi đối số từ điển. Tôi cũng có thể sử dụng clojurescript, nhưng tôi thích cách tiếp cận nhẹ hơn.

+2

@FlavioCysne Tôi vừa xem qua và không thể xem nó liên quan đến câu hỏi của tôi như thế nào. –

+0

chỉ để làm rõ (vì tôi hiện đang làm việc trên một cái gì đó khá giống nhau), bạn cần bản đồ liên tục kết quả hành xử như một đối tượng bản địa bao gồm "." truy cập? Điều đó sẽ yêu cầu hoặc mô phỏng bằng cách sử dụng getters, hoặc sao chép toàn bộ cấu trúc từ việc sửa đổi và đóng băng nó, cho các bản đồ phẳng lớn trở nên kém hiệu quả khá nhanh (và cả hai yêu cầu ES5) ... hoặc bạn tốt với các hàm/phương thức truy cập nội dung (cách tiếp cận của tôi)? –

+0

Tôi muốn được hạnh phúc nhất với các giải pháp truy cập doc, nhìn thấy nhược điểm của nó, mặc dù. Tôi không có bản đồ lớn. Yêu cầu ES5 ... tốt, tôi sẽ suy nghĩ về cách tiếp cận truy cập chức năng của bạn. –

Trả lời

3

Tôi đã hoàn tất việc triển khai Bản đồ liên tục (và sẽ sớm kết thúc Persistent Vector) cho JavaScript, vì có vẻ như nhu cầu ngày càng tăng.

Có một số chi tiết cụ thể so với ví dụ: Java (thiếu equals, hashCode để dựa vào), do đó việc thực hiện sử dụng cây nhị phân được cân bằng được sắp xếp (cân bằng thực sự được đơn giản hóa và tăng tốc bởi tính bất biến) và === cho bình đẳng và < hoặc chức năng tùy chỉnh cho thấp hơn.

mã của Feat.js (tên mã dự án) có sẵn tại feat-sorted-map.js at github.com

Bạn có thể thấy một trang với các xét nghiệm làm việc trong hành động trực tuyến tại feat.js at cofylang.org

Hiện nay, không có tài liệu ngoại trừ nguồn mã và thử nghiệm, nhưng tôi cũng đang làm việc để hoàn thành nó.

Cập nhật: có triển khai một vectơ liên tục có sẵn ở đó, và tốc độ đã được cải thiện theo thứ tự độ lớn. (Nó đã được làm sạch-up cũng) feat-vector.js at github.com

+1

Trông ấn tượng, cảm ơn bạn @jJ ' –

+0

Tôi thích mã nhỏ như thế nào. –

+0

@jJ, bạn đã làm gì để tăng tốc độ này? – Scott

8

Tôi sẽ xem xét Mori. Nó đóng gói cấu trúc dữ liệu chức năng của ClojureScript để sử dụng từ Javascript cũ đơn giản. Kể từ khi các cấu trúc dữ liệu đến từ ClojureScript tôi mong đợi chúng được kiểm tra tốt hơn, đầy đủ hơn và hiệu quả hơn các thư viện khác.

https://github.com/swannodette/mori

Các vấn đề liên quan