Over a million developers have joined DZone.
Platinum Partner

Some Useful Underscore Methods

· Web Dev Zone

The Web Dev Zone is brought to you by Stormpath—offering a pre-built Identity API for developers. Easily build powerful user management, authentication, and authorization into your web and mobile applications. Download this Forrester report on the new landscape of Customer Identity and Access Management.

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.

where:

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.

pluck:

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.

countBy:

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}

sortBy:

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.

groupBy:

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'}
]
}
shuffle

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

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));     }; }
pairs

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.

The Web Dev Zone is brought to you by Stormpath—offering a pre-built, streamlined User Management API for building web and mobile applications. Check out our top pointers for designing your REST API.

Topics:

Published at DZone with permission of Sagar H Ganatra , DZone MVB .

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}