Anyone familiar with Linq's ToDictionary method may be looking for a similar technique in JavaScript.

The cool thing about JavaScript is that first-order properties (properties attached to the first prototype of the instance) are usually implemented in a "dicationary-like" way. Thus we can use properties to achieve fast lookups.

The task is, given an array of objects, create an O(1) object lookup based on some key.

var data = [
  { id: 1, name: 'Brian'},
  { id: 2, name: 'Jake'},
  { id: 3, name: 'Tim'}
];

// Convert to

var lookup = {
  '1': { id: 1, name: 'Brian' },
  '2': { id: 2, name: 'Jake' },
  '3': { id: 3, name: 'Tim' }
};

The POJO approach would be to do something like:

var lookup = {};
data.forEach(function(datum) { 
  lookup[datum.id] = datum;
});

Alternatively, using Underscore, you can create an object lookup by using _.indexBy.

// by property
_.indexBy(data, 'id');

// by iterator function
_.indexBy(data, function(datum) { 
  return datum.id; 
});