Was ist der beste Weg, um zu konvertieren:
['a','b','c']
zu:
{
0: 'a',
1: 'b',
2: 'c'
}
javascript
arrays
node.js
object
David Hellsing
quelle
quelle
_.keyBy
(früher_.indexBy
) Folgendes in_.toPlainObject
. Beispiel:var myObj = _.toPlainObject(myArr)
Antworten:
ECMAScript 6 führt das leicht polyfüllbare ein
Object.assign
:Die eigene
length
Eigenschaft des Arrays wird nicht kopiert, da sie nicht aufzählbar ist.Sie können auch die ES6- Spread-Syntax verwenden , um das gleiche Ergebnis zu erzielen:
quelle
{ ...[sortedArray]}
Mit einer Funktion wie dieser:
Ihr Array ist bereits mehr oder weniger nur ein Objekt, aber Arrays haben ein "interessantes" und spezielles Verhalten in Bezug auf Eigenschaften mit ganzzahligen Namen. Das Obige gibt Ihnen ein einfaches Objekt.
edit oh auch du möchtest vielleicht "Löcher" im Array berücksichtigen:
In modernen JavaScript-Laufzeiten können Sie die folgende
.reduce()
Methode verwenden:Das vermeidet auch "Löcher" im Array, denn so
.reduce()
funktioniert es.quelle
[]
) zu erstellen, wenn Sie keine numerischen Eigenschaftsschlüssel und die Eigenschaft "length" verwenden.const obj = arr.reduce((obj, cur, i) => { return { ...obj, [i]: cur }; }, {});
const obj = arr.reduce((obj, cur, i) => ({ ...obj, [i]: cur }), {});
Sie könnten einen Akku aka verwenden
reduce
.Übergeben Sie ein leeres Objekt
{}
als Ausgangspunkt. dann "erweitern" Sie dieses Objekt schrittweise. Am Ende der Iterationenresult
wird{"0": "a", "1": "b", "2": "c"}
Wenn Ihr Array aus einer Reihe von Schlüssel-Wert-Paar-Objekten besteht:
wird herstellen:
{a: 1, b: 2, c: 3}
Der Vollständigkeit halber
reduceRight
können Sie Ihr Array in umgekehrter Reihenfolge durchlaufen:wird herstellen:
{c:3, b:2, a:1}
Ihr Akku kann für Ihren speziellen Zweck von einem beliebigen Typ sein. Um beispielsweise den Schlüssel und den Wert Ihres Objekts in einem Array auszutauschen, übergeben Sie
[]
:wird herstellen:
[{1: "a"}, {2: "b"}, {3: "c"}]
Im Gegensatz zu
map
,reduce
kann nicht als 1-1 - Mapping verwendet werden. Sie haben die volle Kontrolle über die Elemente, die Sie ein- oder ausschließen möchten. Soreduce
können Sie erreichen, wasfilter
funktioniert, wasreduce
sehr vielseitig macht :wird herstellen:
[{2: "b"}, {3: "c"}]
Achtung :
reduce
undObject.key
sind Teil vonECMA 5th edition
; Sie sollten eine Polyfüllung für Browser bereitstellen, die diese nicht unterstützen (insbesondere IE8).Siehe eine Standardimplementierung von Mozilla .
quelle
Wenn Sie jquery verwenden:
quelle
{0: 'a', 1: 'b', 2: 'c'}
das erwartete Ergebnis.Der Vollständigkeit halber verbreitet sich ECMAScript 2015 (ES6). Benötigt entweder einen Transpiler (Babel) oder eine Umgebung mit mindestens ES6.
quelle
Ich würde es wahrscheinlich so schreiben (da ich sehr selten nicht die Unterstrichbibliothek zur Hand habe):
quelle
obj=_.extend({},a);
den Job erledigen. Auch wenn Sie durch Arrays iterieren,_.each
würde ich sagen, wäre angemessener als_.map
. Alles in allem ist dies auf mehreren Ebenen keine gute Antwort.Hier ist der Vollständigkeit halber eine O (1) ES2015-Methode.
quelle
length
Eigentum wird dadurch nicht entfernt . (3) Das Objekt ist immer noch ein ArrayArray.isArray(arr) === true
. (4) Spezielle Array-Verhaltensweisen werden nicht entfernt, zarr.length = 0
. B. werden alle Indizes entfernt. (5) Daher denke ich, dassObject.assign
es viel besser ist .Array.isArray
kehrttrue
für das "Objekt" hier zurück, obwohlinstanceof Array
nicht ...Überrascht nicht zu sehen -
quelle
{ "first":"a", "second":"b","third":"c" }
mit den Schlüsseln zu erstellen, dieWir können verwenden
Object.assign
undarray.reduce
funktionieren, um ein Array in ein Objekt zu konvertieren.quelle
Am Ende habe ich den Object Spread Operator verwendet, da dieser Teil des ECMAScript 2015 (ES6) -Standards ist.
Habe die folgende Geige als Beispiel gemacht.
quelle
In modernem JavaScript ist es einfach,
Object.assign()
nur den Schlüssel zu kopieren: Wert von einem Objekt auf ein anderes. In unserem FallArray
spendet Immobilien an neue{}
.quelle
O.assign
aber es fehlte eine Erklärung. Heutzutage ist die Zerstörung eines Arrays in ein Objekt ein Weg ({...array}
)Spreizen Sie für ES2016 den Operator für Objekte. Hinweis: Dies ist nach ES6 und daher muss der Transpiler angepasst werden.
quelle
Fünf Jahre später gibt es einen guten Weg :)
Object.assign
wurde in ECMAScript 2015 eingeführt.quelle
Mit
javascript#forEach
einem kann man das machenMit ECMA6:
quelle
FWIW, ein anderer neuerer Ansatz besteht darin, das Neue
Object.fromEntries
zusammen mitObject.entries
wie folgt zu verwenden:... wodurch vermieden wird, spärliche Array-Elemente als
undefined
oder zu speichernnull
und nicht indexierte (z. B. nicht positive Ganzzahl- / nicht numerische) Schlüssel beizubehalten.Man kann jedoch hinzufügen
arr.length
, da dies nicht enthalten ist:quelle
Sie können den Spread-Operator verwenden
quelle
Wenn Sie ES6 verwenden, können Sie Object.assign und den Spread-Operator verwenden
Wenn Sie Array wie verschachtelt haben
quelle
new Map([['key1', 'value1'], ['key2', 'value2']]);
Eine schnelle und schmutzige:
quelle
{0:"c", 1:"b", 2:"a"}
. Sie möchtenunshift
stattdessen stattpop
oder (besser) mit beginneni=arr.length-1
und stattdessen dekrementieren.l = arr.length
und dannwhile (l && (obj[--l] = arr.pop())){}
(mir ist klar, dass dies alt ist, aber warum nicht noch weiter vereinfachen).Schnell und schmutzig # 2:
quelle
i < a.length
statta[i]
.Ab Lodash 3.0.0 können Sie _.toPlainObject verwenden
quelle
Hier ist eine rekursive Funktion, die ich gerade geschrieben habe. Es ist einfach und funktioniert gut.
Hier ist ein Beispiel ( jsFiddle ):
Ergebnisse:
quelle
['a' = '1', 'b' = '2', 'c' = '3']
und wollen, dass{a: 1, b: 2, c: 3}
dies perfekt funktioniert.[docs]
oder ausführlicher
oder
kürzeste mit Vanille JS
ein komplexeres Beispiel
noch kürzer (mit
function(e) {console.log(e); return e;}
===(e)=>(console.log(e),e)
)[/ docs]
quelle
[/docs]
? Es wäre sinnvoller, die Codefragmente ausführbar zu machen.Ich würde das einfach mit machen
Array.of()
. Array of kann den Kontext als Konstruktor verwenden.Wir können uns also
Array.of()
an eine Funktion binden und ein Array-ähnliches Objekt generieren.Durch die Verwendung
Array.of()
kann man sogar eine Array-Unterklassifizierung durchführen .quelle
Wenn Sie
Map
oder verwenden könnenObject.assign
, ist es sehr einfach.Erstellen Sie ein Array:
Im Folgenden wird ein Objekt mit Index als Schlüssel erstellt:
Replizieren Sie dasselbe wie oben mit Maps
Konvertiert in ein indexbasiertes Objekt
{0 : 'css'}
usw.In ein wertbasiertes Objekt konvertieren
{css : 'css is great'}
etc ...quelle
Eine einfache und freche Methode, um ein Array von Elementen schnell in ein Objekt umzuwandeln
Dann benutze es so ...
Ausgabe:
Überprüfen des Typs:
UND die Dinge wären nicht vollständig, wenn es keine Prototypmethode gäbe
Verwenden von like:
Ausgabe:
* HINWEIS: Es gibt keine Benennungsroutine. Wenn Sie also bestimmte Namen haben möchten, müssen Sie die vorhandenen Methoden weiter unten verwenden.
Ältere Methode
Auf diese Weise können Sie aus einem Array ein Objekt mit Schlüsseln generieren, die Sie in der gewünschten Reihenfolge definieren.
console.log(">>> :" + result.onion);
Gibt "paint" aus, muss die Funktion gleich lange Arrays haben, sonst erhalten Sie ein leeres Objekt.Hier ist eine aktualisierte Methode
quelle
Oder verwenden
quelle
ES5 - Lösung:
Mit den Array- Prototypfunktionen 'push' und 'apply' können Sie das Objekt mit den Array-Elementen füllen.
quelle
{ name: a, div :b, salary:c}
Eine vom Browser unterstützte und flexiblere Methode besteht darin, eine normale Schleife zu verwenden , etwa:
Aber auch die moderne Art könnte den Spread-Operator verwenden , wie:
Oder Objekt zuweisen :
Beide werden zurückkehren :
quelle
Sie könnten eine Funktion wie diese verwenden:
Dieser sollte spärliche Arrays effizienter handhaben.
quelle
Hier ist eine Lösung in Coffeescript
quelle
obj[i] = v for v,i in arr when v?