Over a million developers have joined DZone.

Some Useful Underscore Methods

DZone's Guide to

Some Useful Underscore Methods

· Web Dev Zone
Free Resource

Discover how to focus on operators for Reactive Programming and how they are essential to react to data in your application.  Brought to you in partnership with Wakanda

I like jQuery and I use it in all my projects. Lately I've been looking into Design Patterns and Backbone framework. Backbone has a dependency on Underscore and more often than not, people use Underscore as a client-side templating engine when using Backbone. I was looking at the Underscore documentation and came across a bunch of useful methods.


The where method looks into the array of objects and returns only those objects that contain the specified key value pairs:

var arrayOfObjects = [
{car: 'Ford', model: 'Figo', color: 'red'}, {car: 'Honda', model: 'CRV', color: 'green'}, {car: 'Ford', model: 'EcoSport', color: 'red'} ]; _.where(arrayOfObjects, {color: 'red'});
The above would return the first and the third object in the array.


The pluck method allows you to pluck the values for the specified key. Consider the above array and when you run
_.pluck(arrayOfObjects, 'model')
this would return ['Figo', 'CRV', 'EcoSport'] i.e. all the values for the specified key.


Consider the same array again, say you want to find the number of objects with the specified key. For example, there are two 'Ford' cars and one 'Honda'. The countBy method returns you this data.
_.countBy(arrayOfObjects, function(currentObject) { return currentObject.car; });
This returns an object {Ford: 2, Honda: 1}


To sort an array of objects with the specified key sortBy function comes in very handy:
_.sortBy(arrayOfObjects, function(currentObject) { return currentObject.model; });
This would rearrange the array of objects alphabetically by car model.


The groupBy function is another great utility if you want to group the objects in an array by some key:
_.groupBy(arrayOfObjects, function(currentObject) { return currentObject.car });
This would retunrn a single object
Ford: [
{car: 'Ford', model: 'Figo', color: 'red'},
{car: 'Ford', model: 'EcoSport', color: 'red'}
Honda: [
{car: 'Honda', model: 'CRV', color: 'green'}

This utility function would just shuffle the values in the list and every time you run this method it would return you a different shuffled list
_.shuffle([1,2,3,4,5,6,7,8]); [3, 4, 8, 7, 6, 1, 2, 5]

Memoize allows you to cache the result of a function call. Say there is a function that returns the factorial of a number. If the function is called multiple times with the same value then memoize will return the cached result instead of calling the function.
var factorial = _.memoize( function(n) {     if (n == 1) return 1;     return n * factorial(n-1); }
Now on calling factorial(150) multiple times, the function is invoked only once and fetched from the cached in subsequent calls. When you look at the function definition it makes it clear that the data is returned from the cache and not by computing the result:
function (func, hasher) {     var memo = {};     hasher || (hasher = _.identity);     return function() {       var key = hasher.apply(this, arguments);       return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));     }; }

The pairs function allows you to convert an object into a array of key-value pairs:
_.pairs({'car': 'Ford', 'model': 'Figo', 'color': 'red'});
This returns a two dimensional array:
[['car','Ford'], ['model','Figo'], ['color','red']]
Although there are many other useful methods available in the Underscore library, I've listed the ones I'll be using soon in my everyday projects.

Learn how divergent branches can appear in your repository and how to better understand why they are called “branches".  Brought to you in partnership with Wakanda


Published at DZone with permission of Sagar Ganatra, DZone MVB. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}