Ich möchte ein Objekt wie folgt konvertieren:
{"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
in ein Array von Schlüssel-Wert-Paaren wie folgt:
[[1,5],[2,7],[3,0],[4,0]...].
Wie kann ich ein Objekt in JavaScript in ein Array von Schlüssel-Wert-Paaren konvertieren?
javascript
arrays
type-conversion
Soptareanu Alex
quelle
quelle
NaN
stattdessen zurück , wenn versucht wird, Ihren Schlüssel in eine Zahl umzuwandeln . Wenn Sie Zeichenfolgen als Schlüssel verwenden möchten, ändern Sie die Rückgabe von[Number(key), obj[key]]
auf[key, obj[key]]
oder verwenden Sie dasObject.entries
in der Antwort vorgeschlageneDer beste Weg ist:
Wenn Sie
entries
wie hier gezeigt anrufen , werden[key, value]
Paare zurückgegeben, wie vom Fragesteller angefordert.Alternativ können Sie aufrufen
Object.values(obj)
, was nur Werte zurückgibt.quelle
Die
Object.entries
Funktion gibt fast genau die Ausgabe zurück, nach der Sie fragen, außer dass die Tasten Zeichenfolgen anstelle von Zahlen sind.Wenn die Schlüssel Zahlen sein müssen, können Sie das Ergebnis einem neuen Array mit einer Rückruffunktion zuordnen, die den Schlüssel in jedem Paar durch eine daraus erzwungene Zahl ersetzt.
Ich verwende eine Pfeilfunktion und
Object.assign
für den Map-Rückruf im obigen Beispiel, damit ich sie in einer Anweisung behalten kann, indem ich die Tatsache nutze, dassObject.assign
das zugewiesene Objekt zurückgegeben wird, und der Rückgabewert einer einzelnen Anweisungspfeilfunktion ist das Ergebnis der Anweisung.Dies entspricht:
Wie von @TravisClarke in den Kommentaren erwähnt, könnte die Kartenfunktion verkürzt werden auf:
Dies würde jedoch ein neues Array für jedes Schlüssel-Wert-Paar erstellen, anstatt das vorhandene Array an Ort und Stelle zu ändern, wodurch die Anzahl der erstellten Schlüssel-Wert-Paar-Arrays verdoppelt würde. Während auf das ursprüngliche Eintragsarray noch zugegriffen werden kann, werden es und seine Einträge nicht durch Müll gesammelt.
Obwohl bei Verwendung unserer In-Place-Methode immer noch zwei Arrays verwendet werden, die die Schlüssel-Wert-Paare enthalten (das Eingabe- und das Ausgabearray), ändert sich die Gesamtzahl der Arrays nur um eins. Die Eingabe- und Ausgabearrays sind nicht wirklich mit Arrays gefüllt, sondern Verweise auf Arrays und diese Verweise nehmen einen vernachlässigbaren Speicherplatz ein.
Sie können noch einen Schritt weiter gehen und das Wachstum insgesamt eliminieren, indem Sie das Eintragsarray an Ort und Stelle ändern, anstatt es einem neuen Array zuzuordnen:
quelle
Object.entries(obj).map(e => [+e[0], e[1]]);
Um einige dieser Antworten jetzt im Jahr 2018 zusammenzufassen, wobei ES6 der Standard ist.
Beginnend mit dem Objekt:
Bei dieser letzten Methode kann auch die Array-Reihenfolge in Abhängigkeit vom Wert der Schlüssel neu organisiert werden. Manchmal könnte dies das gewünschte Verhalten sein (manchmal nicht). Der Vorteil besteht nun darin, dass die Werte auf dem richtigen Array-Steckplatz indiziert werden, was für die Suche darauf wesentlich und trivial ist.
Schließlich (nicht Teil der ursprünglichen Frage, aber der Vollständigkeit halber), wenn Sie eine einfache Suche mit dem Schlüssel oder dem Wert benötigen, aber keine spärlichen Arrays, keine Duplikate und keine Neuordnung wünschen, ohne in numerische Schlüssel konvertieren zu müssen ( kann sogar auf sehr komplexe Schlüssel zugreifen), dann ist Array (oder Objekt) nicht das, was Sie brauchen. Ich werde
Map
stattdessen empfehlen :https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
quelle
Noch eine andere Lösung, wenn
Object.entries
sie für Sie nicht funktioniert.quelle
In Ecmascript 6
Geige
quelle
.map((value)=>(value))
Teil bedeutungslos ist - er gibt nur ein Eintragsarray zurück, das genau dem entspricht, das aus demObject.entries(obj)
Aufruf erhalten wurde.Verwendung
Object.keys
undArray#map
Methoden.quelle
Verwenden Sie
Object.entries
diese Option , um jedes Element des Objekts imkey & value
Format zu erhalten, undmap
durchlaufen Sie es dann wie folgt:Wenn Sie jedoch sicher sind, dass die Tasten in progressiver Reihenfolge angezeigt werden, können Sie Folgendes verwenden
Object.values
undArray#map
tun:quelle
Wenn Sie lodash verwenden, kann dies so einfach sein:
quelle
Mit lodash können Sie zusätzlich zu der oben angegebenen Antwort auch den Schlüssel im Ausgabearray haben.
Ohne die Objektschlüssel im Ausgabearray
zum:
Wenn obj das Folgende ist:
Dann wird das Array sein:
Mit den Objektschlüsseln im Ausgabearray
Wenn Sie stattdessen schreiben ('Genre' ist eine Zeichenfolge, die Sie auswählen):
Sie erhalten:
quelle
Ich würde diese einfachste Lösung vorschlagen
Object.entries()
quelle
Sie können
Object.values([])
diese Polyfüllung verwenden, wenn Sie dies noch nicht getan haben:https://stackoverflow.com/a/54822153/846348
Dann können Sie einfach tun:
Denken Sie daran, dass Arrays in js nur numerische Schlüssel verwenden können. Wenn Sie also etwas anderes im Objekt verwendet haben, werden diese zu "0,1,2 ... x"
Es kann nützlich sein, Duplikate zu entfernen, wenn Sie beispielsweise einen eindeutigen Schlüssel haben.
quelle
Verwenden Sie für in
quelle
Rekursives Konvertieren eines Objekts in ein Array
quelle
Wir können Number in String-Typ für Key wie folgt ändern:
quelle
quelle
Dies ist meine einfache Barebone-Implementierung:
quelle
Einfache Lösung
`
quelle
Sie können _.castArray (obj) verwenden .
Beispiel:
_.castArray({ 'a': 1 }); // => [{ 'a': 1 }]
quelle