Meine Anwendung erstellt ein JavaScript-Objekt wie folgt:
myObj= {1:[Array-Data], 2:[Array-Data]}
Aber ich brauche dieses Objekt als Array.
array[1]:[Array-Data]
array[2]:[Array-Data]
Also habe ich versucht, dieses Objekt in ein Array zu konvertieren, indem ich $.each
das Objekt durchlaufen und das Element einem Array hinzugefügt habe:
x=[]
$.each(myObj, function(i,n) {
x.push(n);});
Gibt es eine bessere Möglichkeit, ein Objekt in ein Array oder eine Funktion zu konvertieren?
javascript
jquery
arrays
object
Der Bndr
quelle
quelle
myObj= {1:[Array-Data]
zumyObj= {0:[Array-Data]
nicht Teil Ihrer Bearbeitung war (wie ich mich recht erinnere).Antworten:
Ausgabe:
quelle
$.map
? Bei jeder Suche, die ich hier versuche, werden nur viele Links zu jQuery oder der Kartenmethode von Arrays angezeigt.value.key = index; return [value];
anstelle vonreturn [value];
Wenn Sie nach einem funktionalen Ansatz suchen:
Ergebnisse in:
Das gleiche gilt für eine ES6-Pfeilfunktion:
Mit ES7 können Sie
Object.values
stattdessen Folgendes verwenden ( weitere Informationen ):Oder wenn Sie bereits Underscore / Lo-Dash verwenden:
quelle
Ich denke, Sie können verwenden,
for in
aber überprüfen, ob die Eigenschaft nicht inerithed istBEARBEITEN - Wenn Sie möchten, können Sie auch die Indizes Ihres Objekts beibehalten. Sie müssen jedoch überprüfen, ob sie numerisch sind (und Sie erhalten undefinierte Werte für fehlende Indizes:
quelle
$.map
wird abflachenArray-Data
.[{1:[Array-Data], 2:[Array-Data]}]
Und$.map()
auch nicht erfolgreich aussieht. Es scheint, dass alle Sub-Array-Daten zu einem Array zusammengeführt werden.array.length
sollte 2 zurückgeben (da 2 Elemente vorhanden sind), aber es wird 67 zurückgegeben, was die Anzahl aller Elemente in allen ["Array-Daten"] ist.arr[+i] = myObj[i];
weil (i)for(...in...)
nicht garantiert wird, dass Eigenschaften in beliebiger Reihenfolge zurückgegeben werden. (Ii) In OPs Beispiel beginnen die Eigenschaften bei 1, nicht bei 0.Einfach machen
Das ist alles!
quelle
Wenn Sie den maximalen Index in Ihrem Objekt kennen, können Sie Folgendes tun:
quelle
myObj.length = Object.keys(myObj).length
Da ES5 Object.keys () ein Array zurückgibt, das die direkt für ein Objekt definierten Eigenschaften enthält (mit Ausnahme der in der Prototypkette definierten Eigenschaften):
ES6 geht mit Pfeilfunktionen noch einen Schritt weiter:
quelle
Heutzutage gibt es einen einfachen Weg, dies zu tun: Object.values () .
Ausgabe:
Dies erfordert keine jQuery, es wurde in ECMAScript 2017 definiert.
Es wird von jedem modernen Browser unterstützt (IE vergessen).
quelle
var state = { ingredient: { salad: 1, bacon: 1, } }
und dannvar HariOm = Object.values(state);
folgtconsole.log(typeof HariOM)
, wird der Typ als Objekt angezeigt. Sollte es nicht als Array angezeigt werden?Array.isArray(HariOM)
Die beste Methode wäre die Verwendung einer Javascript-only-Funktion:
quelle
var myObj = {1:[1,2,3],2:[4,5,6]};
quelle
var bbb = {'1': 'a', '3': 'b'}; var x = []; for (var i in bbb) { x[parseInt(i)] = bbb[i];} console.log(x);
ECMASCRIPT 5:
ECMASCRIPT 2015 oder ES6:
quelle
Wie wäre es mit
jQuery.makeArray(obj)
So habe ich es in meiner App gemacht.
quelle
Das Lösen ist sehr einfach
quelle
ES8 Weg leicht gemacht :
Die offizielle Dokumentation
quelle
Fiddle Demo
Erweiterung zur Antwort von bjornd .
Referenz
Array.prototype.slice ()
Function.prototype.apply ()
Object.prototype.hasOwnProperty ()
Object.keys ()
quelle
Wenn Sie den Namen der Objekteigenschaften als Werte beibehalten möchten. Beispiel:
Verwenden Sie
Object.keys()
,Array.map()
undObject.assign()
:Ergebnis:
Erläuterung:
Object.keys()
listet alle Eigenschaften der Quelle auf;.map()
wendet die=>
Funktion auf jede Eigenschaft an und gibt ein Array zurück;Object.assign()
führt Name und Wert für jede Eigenschaft zusammen.quelle
Ich habe eine benutzerdefinierte Funktion erstellt:
quelle
Nach einigen Tests ist hier ein allgemeiner Objekt-zu-Array-Funktionskonverter:
Sie haben das Objekt:
Die Funktion:
Funktionsgebrauch:
Du erhältst:
Dann können Sie alle Schlüssel und Werte erreichen wie:
Ergebnis in der Konsole:
Bearbeiten:
Oder in Prototypform:
Und dann benutze wie:
quelle
Sie können eine einfache Funktion erstellen, um die Konvertierung von
object
nacharray
durchzuführen. So etwas kann die Arbeit für Sie mit reinem Javascript erledigen:oder dieses:
und rufen Sie die folgende Funktion auf und verwenden Sie sie:
Auch in Zukunft werden wir etwas haben
Object.values(obj)
,Object.keys(obj)
das alle Eigenschaften für Sie als Array zurückgibt, aber in vielen Browsern noch nicht unterstützt wird ...quelle