A glance at the Lo-Dash docs shows that the API falls in to categories of:
A more detailed look in to the Arrays API shows approximately 30 different methods available that are applicable to arrays.
The Collections API has a few more methods than the Arrays API, and they do not share the same methods.
Within the Collections API, a collection is described as an object that is iterated, and may be an array:
collection (Array|Object|string): The collection to iterate over.
Also, interestingly, there's a Collections API method _.toArray
that returns an array from a collection:
Arguments
collection (Array|Object|string): The collection to convert. Returns
(Array): Returns the new converted array.
Would anyone happen to know a formal difference between an array and collection in the Lo-Dash API? I was under the presumption it was a difference due to Backbone.js, however, am now questioning my reasoning to that end, since the methods may be available elsewhere. Thanks in advance.
Arrays can hold the only the same type of data in its collection i.e only homogeneous data types elements are allowed in case of arrays. Collection, on the other hand, can hold both homogeneous and heterogeneous elements. Arrays can hold both object and primitive type data.
Arrays are static in that they don't grow or shrink as you add/remove items from them. Collections are dynamic in that they grow or shrink as you add and remove items from them.
Basically, "collections" are things that implement some kind of "iterable" interface, and they internally use the same iteration method (though Lodash source is a bit more convoluted than Underscore).
It's a good idea to look at the more elaborate Underscore.js documentation, from which this distinction is derived. It states:
Collection functions work on arrays, objects, and array-like objects such as
arguments
, NodeList and similar. But it works by duck-typing, so avoid passing objects with a numericlength
property.
Basically, "collections" are things that implement some kind of "iterable" interface, and they internally use the same iteration method (though Lodash source is a bit more convoluted than Underscore). All the "collection methods" do work both on arrays and objects (and a few more iterable things), while the array methods should only be used on arrays (or maybe everything with .length
and numeric indices), and the object methods work on any objects.
All Arrays are collections but not all collections are arrays. An Object (i.e. {k: v, ... }
) is a collection that is not an Array. Many of the iterators can iterate over non-Array collections just fine. In this context you can think of arrays as, more or less, ordered collections that are indexed by consecutive non-negative integers.
For example, both of these work:
_([6, 11, 23]).each(function() { console.log(arguments); }); _({ a: 6, b: 11, c: 23 }).each(function() { console.log(arguments); });
Demo: http://jsfiddle.net/ambiguous/t8a83/
The arguments that the function gets depend on what sort of thing you're iterating over. If you're iterating over an array then you'd get the element and the index, if you're iterating over an Object then you'd get the value and key.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With