823 Stimmen

Array in Objekt umwandeln

Wie kann ich am besten konvertieren?

['a','b','c']

zu:

{
  0: 'a',
  1: 'b',
  2: 'c'
}

17 Stimmen

Es ist erwähnenswert, dass Javascript-Arrays sind Objekte.

2 Stimmen

Falls noch jemand nach einer Lodash-Lösung sucht, sollten Sie Folgendes in Betracht ziehen _.keyBy (ehemals _.indexBy ): lodash.com/docs#keyBy

1 Stimmen

Dies ist ein bisschen verwirrend, weil Arrays bereits Objekte sind, aber ich denke, der Punkt der Frage ist die Umwandlung der Array exotisches Objekt zu einer gewöhnliches Objekt .

59voto

Johnathan Kanarek Punkte 666

Falls Sie eine der Eigenschaften der iterierten Objekte als Schlüssel verwenden wollen, zum Beispiel:

// from:
const arr = [
    {
        sid: 123,
        name: 'aaa'
    },
    {
        sid: 456,
        name: 'bbb'
    },
    {
        sid: 789,
        name: 'ccc'
    }
];
// to:
{
  '123': { sid: 123, name: 'aaa' },
  '456': { sid: 456, name: 'bbb' },
  '789': { sid: 789, name: 'ccc' }
}

Verwendung:

const result = arr.reduce((obj, cur) => ({...obj, [cur.sid]: cur}), {})

48voto

giovannipds Punkte 2123

Nicht viele Menschen hier haben sich zu den Object.fromEntries Ich mag es wirklich, denn es ist sauberer und funktioniert leicht mit TypScript , ohne sich zu sehr um generische Typen und so weiter zu kümmern. Es erlaubt auch benutzerdefinierte Schlüssel mit Karte falls erforderlich. Nachteile: Sie benötigen eine zusätzliche map , wenn Sie einen benutzerdefinierten Schlüssel wünschen. z.B.:

const tags = [
  { name: 'AgeGroup', value: ageGroup },
  { name: 'ApparelTypes', value: apparelTypes },
  { name: 'Brand', value: brand },
  // ...
]

const objectTags = Object.fromEntries(tags.map((t) => [t.name, t.value]))

/*
{
  AgeGroup: 'Adult',
  Apparel: 'Creeper, Jacket'
  Brand: '',
  // ...
}
*/

48voto

Dave Dopson Punkte 39640

Ich würde es wahrscheinlich so schreiben (da ich sehr selten nicht die underscorejs-Bibliothek zur Hand haben werde):

var _ = require('underscore');

var a = [ 'a', 'b', 'c' ];
var obj = _.extend({}, a);
console.log(obj);
// prints { '0': 'a', '1': 'b', '2': 'c' }

30voto

KARTHIKEYAN.A Punkte 14230

Können wir Object.assign y array.reduce Funktion, um ein Array in ein Objekt zu konvertieren.

var arr = [{a:{b:1}},{c:{d:2}}] 
var newObj = arr.reduce((a, b) => Object.assign(a, b), {})

console.log(newObj)

27voto

Benjamin Gruenbaum Punkte 259076

Hier ist eine O(1) ES2015-Methode nur der Vollständigkeit halber.

var arr = [1, 2, 3, 4, 5]; // array, already an object
Object.setPrototypeOf(arr, Object.prototype); // now no longer an array, still an object

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X