Lo-Dash, difference between array and collection

aug2uag picture aug2uag · May 28, 2014 · Viewed 11.6k times · Source

A glance at the Lo-Dash docs shows that the API falls in to categories of:

  1. Arrays,
  2. Chaining,
  3. Collections,
  4. Functions,
  5. Objects,
  6. Utilities,
  7. Methods,
  8. and Properties

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.

Answer

Bergi picture Bergi · May 28, 2014

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 numeric length 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.