Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lo-Dash, difference between array and collection

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.

like image 630
aug2uag Avatar asked May 28 '14 20:05

aug2uag


People also ask

What is the difference between arrays and collection?

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.

What is difference between array & Collection in VB net?

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.

What is Lodash collection?

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).


2 Answers

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.

like image 172
Bergi Avatar answered Sep 25 '22 22:09

Bergi


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.

like image 42
mu is too short Avatar answered Sep 22 '22 22:09

mu is too short