2012-01-16 19 views
10

Tôi đang tìm thư viện JavaScript điều khiển mảng đối tượng, chủ yếu để lọc, sắp xếp và nhóm/đếm.Lựa chọn thay thế cho underscore.js

Dường như underscore.js khớp với hóa đơn, nhưng tôi muốn được khám phá các tùy chọn khác. Dấu gạch dưới có hơn 60 hàm trong khi tôi chỉ cần một số ít.

Ví dụ: tôi mong đợi một số thư viện có thể đặt dữ liệu để bao gồm các tính năng như vậy, nhưng tôi không biết phải tìm đâu.

+0

bạn luôn có thể thử chỉ cần loại bỏ * số lượng chức năng/phương pháp * bạn cần tạo [nguồn] (http://documentcloud.github.com/underscore/docs/underscore.html) – rlemon

+0

Dựa trên Raynos 'Câu trả lời, tôi thực sự nghĩ rằng tôi nên loại bỏ những gì tôi cần từ shim ES5. – Christophe

Trả lời

8

Nó được gọi là JavaScript arr.filter, arr.sort, arr.length.

Bạn có thể áp dụng bất kỳ phương pháp mảng nào trên một mảng, các phương thức phổ biến là filter, mapreduce, Bạn có thể tạo các hoạt động phức tạp hơn bằng cách kết hợp chúng.

Nếu bạn muốn để lặp qua đối tượng sử dụng

Object.keys(o).forEach(function (key) { 
    var val = o[key]; 
    ... 
}); 

gạch rất hữu ích nếu bạn đang sống trong một thế giới ES3, nhưng ES5 có mọi thứ bạn cần, tất cả các gạch chân làm là thêm sưng lên trên đầu trang của nó.

+21

'arr.length'? Tôi không cung cấp cho bạn số lượng cướp biển trong chương trình của bạn? ;) –

+2

Tôi sống trong một thế giới mà IE 8 và thậm chí IE 7 vẫn còn phổ biến ... http://kangax.github.com/es5-compat-table/ – Christophe

+4

@Christophe [ES5-shim] (https: // github.com/kriskowal/es5-shim) được giải quyết. – Raynos

5

Bạn có thể muốn nhìn vào hai thư viện sau:

+0

Cảm ơn.Rõ ràng là thứ hai chỉ hoạt động trên mảng số, trong khi tôi cần một giải pháp cho mảng các đối tượng. – Christophe

18

Tôi biết điều này là cũ nhưng bạn đã nhìn vào lodash? Từ trang web:

Thay thế thả * cho Underscore.js. [...]

Xây dựng tùy chỉnh giúp dễ dàng tạo các phiên bản nhẹ của Lo-Dash chỉ chứa các phương pháp bạn cần. Để đầu nó đi, chúng tôi xử lý tất cả các phụ thuộc phương pháp và lập bản đồ bí danh cho bạn.

+0

Lợi thế của Lo-Dash trên dấu gạch dưới là gì? Dấu gạch dưới đã rất nhỏ. – blaster

+2

@blaster: Lo-Dash được tối ưu hóa hơn một chút. Bạn có thể thấy một số kết quả điểm chuẩn trực quan tốt đẹp tại đây: http://dtao.github.io/lazy.js/ –

10

Hãy xem lazy.js (http://dtao.github.io/lazy.js/) tương tự như underscore.js nhưng với improvment hiệu suất đáng kể do đánh giá lười biếng

+2

Thư viện này chỉ đạt hiệu suất khi bạn muốn kết nối nhiều thao tác với nhau. Việc thực hiện một 'map()' hoặc 'reduce()' duy nhất sẽ thấy được hiệu suất không (nó sẽ thực sự chậm hơn trong một số trường hợp đặc biệt là so với lodash). Tuy nhiên, hiệu suất của nó đạt được ** thực sự ** đáng chú ý khi hoạt động trên các tập dữ liệu rất lớn. – idbehold

+3

@idbehold: Nó phụ thuộc vào môi trường và kích thước của mảng, vì các công cụ JavaScript khác nhau hoạt động rất khác nhau. Trên Chrome, ví dụ, ngay cả đối với mảng nhỏ và không có chuỗi Lazy.js hoạt động tốt hơn Lo-Dash. Nhưng trên Firefox, bạn nói đúng rằng Lo-Dash nhanh hơn trong kịch bản đó. –

1

lowscore được thiết kế để trở thành một dấu gạch dưới rất nhẹ:

  • bạn có thể require chỉ những chức năng bạn cần
  • có thể giảm kích thước JS khoảng 15k minified hoặc khoảng 50k không được rút gọn.