Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hot to use reduce to convert a array of objects to a single object

Tags:

javascript

i'm trying to work with reduce or map, but i'm a noob some times.

i'm trying to use this function to return a single array from the objects.

var obj = [{ a: 1 }, { b: 2 }, { c: 3 }];
    var result = obj.reduce((obj, item) => [item.key] = item.value);
    console.log(result);

but i'm always getting :

Uncaught TypeError: Cannot read property 'Symbol(Symbol.iterator)' of undefined

I searched a lot, but the examples didn't help me... i think that's something simple, but after 1 hour, i'm nothing getting .

What i want..

[{a: 1}, {b: 2}, {c: 3}] to {a: 1, b: 2, c: 3}
like image 811
Eduardo Jastre Avatar asked Jan 29 '23 15:01

Eduardo Jastre


2 Answers

You could use Object.assign and spread syntax ....

var obj = [{ a: 1 }, { b: 2 }, { c: 3 }];

console.log(Object.assign({}, ...obj));

With Array#reduce

var obj = [{ a: 1 }, { b: 2 }, { c: 3 }];

console.log(obj.reduce((r, o) => Object.assign(r, o), {}));

Without Object.assign

var obj = [{ a: 1 }, { b: 2 }, { c: 3 }];

console.log(obj.reduce((r, o) => (Object.entries(o).forEach(([k, v]) => r[k] = v), r), {}));

ES5

var obj = [{ a: 1 }, { b: 2 }, { c: 3 }];

console.log(obj.reduce(function (r, o) {
    Object.keys(o).forEach(function (k) {
        r[k] = o[k];
    });
    return r;
}, {}));
like image 65
Nina Scholz Avatar answered Feb 01 '23 05:02

Nina Scholz


If you want to use reduce:

var arr = [{ a: 1 }, { b: 2 }, { c: 3 }];

var result = arr.reduce((obj, item) => Object.assign(obj, item), {});

Check the MDN documentation when in doubt.

like image 23
Salomao Rodrigues Avatar answered Feb 01 '23 03:02

Salomao Rodrigues