Convert JavaScript array of 2 element arrays into object key value pairs

Lodash has a _.fromPairs method that does exactly that.

From the documentation:

_.fromPairs([['a', 1], ['b', 2]]);
// => { 'a': 1, 'b': 2 }  

Terse version using modern syntax:

let objectify = a => a.reduce( (o,[k,v]) => (o[k]=v,o), {} );

I use this technique as part of a terse query string parser:

// Converts "?foo=bar&j=1&go" into { foo:'bar', j:'1', go:true }
function parseQueryString(qs) {
    var q = decodeURIComponent;
    return qs.replace(/^\?/,'').split('&').map(s => s.split('='))
             .reduce((o,[k,v]) => (o[q(k)] = v?q(v):true, o), {});
}

With Object.fromEntries, you can convert from Array to Object:

var array = [
  [1, 'a'],
  [2, 'b'],
  [3, 'c']
];
var object = Object.fromEntries(array);
console.log(object);

You could indeed use Array.prototype.reduce:

function objectify(array) {
    return array.reduce(function(p, c) {
         p[c[0]] = c[1];
         return p;
    }, {});
}

where p is the result of the previous iteration, initially {}, and c is the current element of the array.

It's unlikely to be any faster than array.forEach, but it is IMHO cleaner. I don't believe there's any simpler implementation than this.

NB: a function to do exactly this already exists in the Underscore library: _.object(array)