Ich versuche das zu ändern:

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

Das mögen:

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

Unterstrich verwenden.

Ich habe es versucht

_.object(list);

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

_.object(_.keys(list[0]), _.values(list[0]));
3
ThomasReggi 20 Nov. 2013 im 22:07

6 Antworten

Beste Antwort

Ich bin kein Experte für underscore.js, aber versuchen Sie Folgendes:

_.extend.apply(null, list);

Eine Einschränkung: Dadurch wird das erste Element der Liste geändert. Wenn dies ein Problem darstellt, möchten Sie möglicherweise Folgendes verwenden:

_.extend.apply(null, [{}].concat(list));
17
p.s.w.g 20 Nov. 2013 im 18:25

Sie möchten _.reduce():

_.reduce(list, function(memo, o) {
  var k = Object.keys(o)[0];
  memo[k] = o[k];
  return memo;
}, {});
3
Pointy 20 Nov. 2013 im 18:11

Sie können Object.assign() und verbreiten Syntax wie folgt:

let array = [ { '231634908': 137875 },
  { '388252786': 150004 },
  { '333624027': 144107 },
  { '382758108': 149729 },
  { '384113458': 149803 },
  { '384844004': 149848 },
  { '405877005': 150481 },
  { '405877005': 150481 } ]
  
const output = Object.assign({}, ...array)
console.log(output)
0
adiga 21 März 2019 im 14:36

Ich weiß, dass dies wirklich alt ist, aber es hat mich dazu inspiriert, diese native Zeile für Multi-Key-Objekte zu erstellen:

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; }, {})

Ergebnis: {foo: 'bar', Hund: 'Katze', baz: 'boom'}

0
kfancy 16 Nov. 2017 im 01:20

Eine elegantere und einheimischere Art, dies zu tun.

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]];
});
3
deb0rian 20 Nov. 2013 im 18:16

Eine weitere native Lösung für den Fall mit mehreren Feldern pro Objekt

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);
1
mdolbin 20 Nov. 2013 im 18:14