Flatten array with objects into 1 object

前端 未结 8 1496
情歌与酒
情歌与酒 2020-12-03 09:41

Given input:

[{ a: 1 }, { b: 2 }, { c: 3 }]

How to return:

{ a: 1, b: 2, c: 3 }

For arrays it\'s not a pr

相关标签:
8条回答
  • 2020-12-03 10:38

    You can use underscore.extend function like that:

    var _ = require('underscore');
    var a = [{ a: 1 }, { b: 2 }, { c: 3 }];
    
    var result = _.extend.apply(null, a);
    console.log(result); // { a: 1, b: 2, c: 3 }
    console.log(a); // [ { a: 1, b: 2, c: 3 }, { b: 2 }, { c: 3 } ]
    

    And to prevent modifying original array you should use

    var _ = require('underscore');
    var a = [{ a: 1 }, { b: 2 }, { c: 3 }];
    
    var result = _.extend.apply(null, [{}].concat(a));
    console.log(result); // { a: 1, b: 2, c: 3 }
    console.log(a); // [ { a: 1 }, { b: 2 }, { c: 3 } ]
    

    Here can test it

    0 讨论(0)
  • 2020-12-03 10:40

    With lodash, you can use merge():

    var arr = [ { a: 1 }, { b: 2 }, { c: 3 } ];
    _.merge.apply(null, [{}].concat(arr));
    // → { a: 1, b: 2, c: 3 }
    

    If you're doing this in several places, you can make merge() a little more elegant by using partial() and spread():

    var merge = _.spread(_.partial(_.merge, {}));
    merge(arr);
    // → { a: 1, b: 2, c: 3 }
    
    0 讨论(0)
提交回复
热议问题