Javascript 将对象数组转换为一个对象

Javascript 将对象数组转换为一个对象,javascript,arrays,object,underscore.js,Javascript,Arrays,Object,Underscore.js,我正试图扭转这一局面: [ { '231634908': 137875 }, { '388252786': 150004 }, { '333624027': 144107 }, { '382758108': 149729 }, { '384113458': 149803 }, { '384844004': 149848 }, { '405877005': 150481 }, { '405877005': 150481 } ] 为此: { '231634908

我正试图扭转这一局面:

[ { '231634908': 137875 },
  { '388252786': 150004 },
  { '333624027': 144107 },
  { '382758108': 149729 },
  { '384113458': 149803 },
  { '384844004': 149848 },
  { '405877005': 150481 },
  { '405877005': 150481 } ]
为此:

{
    '231634908': 137875,
    '388252786': 150004,
    '333624027': 144107,
    '382758108': 149729,
    '384113458': 149803,
    '384844004': 149848,
    '405877005': 150481,
    '405877005': 150481
}
使用下划线

我试过了

_.object(list);

_.object(_.keys(list), _.values(list));

_.object(_.keys(list[0]), _.values(list[0]));

我不是下划线.js方面的专家,但请尝试以下方法:

_.extend.apply(null, list);
一个警告:这实际上会修改列表的第一个元素。如果这是一个问题,您可能希望使用类似的方法:

_.extend.apply(null, [{}].concat(list));
您需要
.reduce()


对于每个对象具有多个字段的情况,还有一个本机解决方案

var objects = [ { '231634908': 137875 },
  { '388252786': 150004 },
  { '333624027': 144107 },
  { '382758108': 149729 },
  { '384113458': 149803 },
  { '384844004': 149848 },
  { '405877005': 150481 },
  { '405877005': 150481 } ]


var singleObject = {};

for(var i in objects){
    var oKeys = Object.keys(objects[i]);
    for(var j in oKeys){
        singleObject[oKeys[j]] = objects[i][oKeys[j]];
    }
}

console.log(singleObject);

一种更优雅、更自然的方式

var a = [ { '231634908': 137875 },
{ '388252786': 150004 },
{ '333624027': 144107 },
{ '382758108': 149729 },
{ '384113458': 149803 },
{ '384844004': 149848 },
{ '405877005': 150481 },
{ '405877005': 150481 } ];

var b = {};

Array.prototype.forEach.call(a,function(elem) {
   var keys = Object.keys(elem);
   b[keys[0]] = elem[keys[0]];
});

我知道这真的很古老,但它启发了我对多关键点对象执行本机一行操作:

var arrayOfObjectsToCombine = [ { foo: 'bar', dog: 'cat' }, { baz: 'boom' } ];
arrayOfObjectsToCombine.reduce(function(done, obj) { Object.keys(obj).map( function(K) { done[K] = obj[K] } ); return done; }, {})
结果: {foo:'bar',dog:'cat',baz:'boom'}

你可以这样使用:

let数组=[{'231634908':137875},
{ '388252786': 150004 },
{ '333624027': 144107 },
{ '382758108': 149729 },
{ '384113458': 149803 },
{ '384844004': 149848 },
{ '405877005': 150481 },
{ '405877005': 150481 } ]
const output=Object.assign({},…数组)

console.log(output)
一些下划线专业人士可能会指出,有下划线实用程序可以将其一分为二:)主体可以是。如果您想为此操作创建一个函数,您会如何称呼它
extendArray
?@ThomasReggi可能是
merge
或类似的东西。可能是
var arrayOfObjectsToCombine = [ { foo: 'bar', dog: 'cat' }, { baz: 'boom' } ];
arrayOfObjectsToCombine.reduce(function(done, obj) { Object.keys(obj).map( function(K) { done[K] = obj[K] } ); return done; }, {})