Wie kann ich eine große Transformation object
zu array
mit lodash?
var obj = {
22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],}
12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],}
}
// transform to
var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]
javascript
arrays
object
lodash
Siavolt
quelle
quelle
Antworten:
Du kannst tun
Dokumentation finden Sie hier.
quelle
id
Eigenschaft nicht vorhanden war und Sie sie basierend auf dem Schlüssel jedes Objekts erstellen wollten.var arr = _.values(_.mapKeys(obj, function(value, key) { value.id = key; return value; }));
return
Wert manuell auf ein Array wie diesesconst divisionsList = []; _.mapKeys(divisions, (value, key) => { divisionsList[key] = value; });
const toArrayWithKey = (obj, keyAs) => _.values(_.mapValues(obj, (value, key) => { value[keyAs] = key; return value; }));
Ausgaben als:
quelle
toArray
zu erhalten, ist dies eine gute Option, aber es gibt keine Möglichkeit, die Schlüssel bei Bedarf beizubehalten.Eine moderne native Lösung, wenn jemand interessiert ist:
oder (nicht IE):
quelle
Object.keys(obj).map(key=>({key,value: obj[key]}))
const arr = Object.keys(obj).map(id => ({ id, ...obj[id] }));
Dies würde das gesamte Objekt in die zurückgegebenen Daten bringen, nein? (mit 'id', da der ursprüngliche Fragesteller seinen Schlüssel als ID-Requisite speichern wollte)Für mich hat das funktioniert:
Es wendet sich
in
quelle
_.map(data, (v,k)=>({[k]: v}))
meiner Antwort._.toPairs
und_fromPairs
ist hier zusätzlich und unnötig.[{key: 'someKey', val: 'The value'}, {....},...]
Es gibt viele Möglichkeiten, um das gewünschte Ergebnis zu erzielen. Teilen wir sie in Kategorien ein:
Nur ES6-Werte :
Hauptmethode hierfür ist Object.values . Mit Object.keys und Array.map können Sie jedoch auch das erwartete Ergebnis erzielen :
Code-Snippet anzeigen
ES6 Schlüssel & Wert :
Mithilfe der dynamischen / berechneten Eigenschaften und der Destrukturierung von Map und ES6 können Sie den Schlüssel beibehalten und ein Objekt von der Map zurückgeben.
Code-Snippet anzeigen
Nur Lodash-Werte :
Die dafür entwickelte Methode ist
_.values
jedoch, dass es "Verknüpfungen" wie gibt_.map
und die Utility-Methode gibt,_.toArray
die auch ein Array zurückgeben würde, das nur die Werte vom Objekt enthält. Man könnte auch_.map
wenn die_.keys
und die Werte aus dem Objekt erhalten , indem die Verwendung vonobj[key]
Notation.Hinweis:
_.map
Wenn ein Objekt übergeben wird, wird es verwendetbaseMap
Handler, der sich im WesentlichenforEach
auf den Objekteigenschaften befindet.Code-Snippet anzeigen
Lodash Key & Value :
Code-Snippet anzeigen
Beachten Sie, dass in den obigen Beispielen ES6 verwendet wird (Pfeilfunktionen und dynamische Eigenschaften). Sie können lodash verwenden
_.fromPairs
und andere Methoden verwenden, um ein Objekt zu , wenn ES6 ein Problem darstellt.quelle
Wenn Sie möchten, dass der Schlüssel (in diesem Fall die ID) als Eigenschaft jedes Array-Elements erhalten bleibt, können Sie dies tun
quelle
Update 2017: Object.values , lodash values und toArray machen es. Und Schlüssel zu bewahren Karte und Verbreitung Betreiber Spiel schön:
quelle
Transformieren eines Objekts in ein Array mit einfachem JavaScript (
ECMAScript-2016
)Object.values
:Wenn Sie auch die Schlüssel verwenden möchten
Object.entries
und diesArray#map
mögen:quelle
var arr = _.map(obj)
Sie können auch die
_.map
Funktion (von beidenlodash
undunderscore
) verwendenobject
. Sie behandelt diesen Fall intern, iteriert mit Ihrem Iterat über jeden Wert und Schlüssel und gibt schließlich ein Array zurück. Tatsächlich können Sie es ohne Iteration (nur_.map(obj)
) verwenden, wenn Sie nur ein Array von Werten möchten. Der gute Teil ist, dass Sie, wenn Sie eine Transformation dazwischen benötigen, dies auf einmal tun können.Beispiel:
Code-Snippet anzeigen
Wenn Sie Ihr Objekt jedoch transformieren möchten, können Sie dies tun, auch wenn Sie den Schlüssel beibehalten müssen. Sie können dies (
_.map(obj, (v, k) => {...}
) mit einem zusätzlichen Argument tunmap
und es dann verwenden, wie Sie möchten.Es gibt jedoch andere Vanilla JS-Lösungen dafür (da jede
lodash
Lösung eine reine JS-Version davon haben sollte) wie:Object.keys
und dannmap
sie zu WertenObject.values
(in ES-2017)Object.entries
und dannmap
jedes Schlüssel / Wert-Paar (in ES-2017)for...in
Schleife und verwenden Sie jede Taste zum Abrufen von WertenUnd vieles mehr. Da diese Frage jedoch für
lodash
(und vorausgesetzt, jemand verwendet sie bereits) gilt, müssen Sie nicht viel über die Version, die Unterstützung von Methoden und die Fehlerbehandlung nachdenken, wenn diese nicht gefunden werden.Es gibt andere Lodash-Lösungen wie
_.values
(für bestimmte Zwecke besser lesbar) oder Paare abrufen und dann zuordnen und so weiter. Für den Fall, dass Ihr Code flexibel sein muss, damit Sie ihn in Zukunft aktualisieren können, da Siekeys
Werte ein wenig beibehalten oder transformieren müssen, ist die beste Lösung, einen einzelnen_.map
Code als Adresse in dieser Antwort zu verwenden. Das wird auch in Bezug auf die Lesbarkeit nicht so schwierig sein.quelle
Objekt zum Array
Von allen Antworten halte ich diese für die beste:
das verwandelt:
zu:
Array zu Objekt
Um sich zurück zu verwandeln:
So transformieren Sie zurück und behalten den Schlüssel im Wert:
Wird geben:
Für das letzte Beispiel können Sie auch lodash
_.keyBy(arr, 'key')
oder verwenden_.keyBy(arr, i => i.key)
.quelle
Wenn Sie eine benutzerdefinierte Zuordnung (wie die ursprüngliche Array.prototype.map) von Object zu einem Array wünschen, können Sie einfach Folgendes verwenden
_.forEach
:Siehe
lodash
Dokument von _.forEach https://lodash.com/docs/#forEachquelle