How do you use underscore's chain method to return the first item in a multidimensional array?

chain, chaining, javascript, underscore.js

Solution

You could do it with `flatten` and `map` thusly:

var firsts = _.chain(array)
              .flatten(true) // This true is important.
              .map(function(a) { return a[0] })
              .value();

Demo: http://jsfiddle.net/ambiguous/cm3CJ/

You use `flatten(true)` to convert your array-of-arrays-of-arrays into an array-of-arrays and then the `map` peels off the first element of each inner array.

If you want something shorter than the `map`, you could use `pluck` to pull out the first element of the inner arrays:

var firsts = _.chain(array)
              .flatten(true) // This true is important.
              .pluck(0)
              .value();

Demo: http://jsfiddle.net/ambiguous/pM9Hq/

`_.pluck` is just a `map` call anyway:

// Convenience version of a common use case of `map`: fetching a property.
_.pluck = function(obj, key) {
  return _.map(obj, function(value){ return value[key]; });
};

This one looks a lot more like the `.map(&:first)` that you'd use in Ruby so it might be more familiar to some people and more concise once you're used to `pluck`. If you really want something Rubyish, you could use a non-anonymous function with `map`:

var first  = function(a) { return a[0] };
var firsts = _.chain(array)
              .flatten(true) // This true is important.
              .map(first)
              .value();

Problem

Say I have an array of arrays, and I want to return the first element of each array within the array: ``` array = [[["028A","028B","028C","028D","028E"], ["028F","0290","0291","0292","0293"], ["0294","0295","0296","0297","0298"], ["0299","029A","029B","029C","029D"], ["029E","029F","02A0","02A1","02A2"]], [["02A3","02A4"], ["02A5", "02A6"]]; ``` I know I can do something like this: ``` var firsts = []; _.each(array, function(item){ _.each(item, function(thisitem){ firsts.push(_.first(thisitem)); }); }); ``` but what if I want to do it with underscore's `_.chain()` method? Just learning underscore, and so far seems very useful.

Original source