Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Lodash/underscore: Convert array of objects to single object

I have an array of objects that looks like so:

var A = [{key:"key1",val:1},{key:"key2",val:2},...,{key:"keyn",val:n}]

And I want to transform A to an object:

{
    key1: 1,
    key2: 2,
    ...
    keyn: n
}

This usecase has never come up, but I was thinking of doing mapKeys and then mapValues and I feel there's a simpler answer. Thanks!

like image 703
ShaharZ Avatar asked Dec 08 '22 01:12

ShaharZ


2 Answers

You don't really need lodash to achieve that. Just do this with array.reduce(). See code sample below:

function transformArray(arraySrc){
    return arraySrc.reduce(function(prev, curr){
        prev[curr.key] = curr.val;
        return prev;
    }, {});
}

transformArray([{key:"key1",val:1},{key:"key2",val:2},{key:"key3",val:3}]);
like image 67
kennasoft Avatar answered Jan 19 '23 06:01

kennasoft


There may be a built-in way that I can’t find, but:

var result = _.zipObject(
    _.pluck(A, 'key'),
    _.pluck(A, 'val')
);
like image 41
Ry- Avatar answered Jan 19 '23 07:01

Ry-