Ich habe ein extrem großes JSON-Objekt, das wie folgt aufgebaut ist:
{A : 1, B : 2, C : 3, D : 4}
Ich brauche eine Funktion, die die Werte mit Schlüsseln in meinem Objekt austauschen kann, und ich weiß nicht, wie es geht. Ich würde eine Ausgabe wie diese benötigen:
{1 : A, 2 : B, 3 : C, 4 : D}
Gibt es eine Möglichkeit, dies zu tun, indem manuell ein neues Objekt erstellt wird, in dem alles ausgetauscht wird?
Vielen Dank
function swap(obj) {return new Map(Object.entries(x).map([k, v] => [v, k]))}
Antworten:
Beispiel hier FIDDLE Vergessen Sie nicht, Ihre Konsole einzuschalten , um die Ergebnisse zu sehen.
ES6- Versionen:
Oder verwenden Sie Array.reduce () & Object.keys ()
Oder verwenden Sie Array.reduce () & Object.entries ()
quelle
Sie können die lodash-Funktion _.invert verwenden. Sie kann auch multivlaue verwenden
quelle
Verwenden von ES6:
quelle
Holen Sie sich die Schlüssel des Objekts und verwenden Sie dann die Reduktionsfunktion des Arrays, um jeden Schlüssel durchzugehen und den Wert als Schlüssel und den Schlüssel als Wert festzulegen.
quelle
In ES6 / ES2015 können Sie nutzen kombinieren Object.keys und reduzieren mit der neuen Object.assign Funktion, eine Pfeil - Funktion und einem berechneten Eigenschaftsnamen für eine ziemlich einfache einzelne Anweisung Lösung.
Wenn Sie mit dem Objektverbreitungsoperator transpilieren (Stufe 3 zum Zeitpunkt des Schreibens), wird dies die Dinge ein wenig weiter vereinfachen.
Wenn Sie Object.entries zur Verfügung haben (Stufe 4 zum Zeitpunkt des Schreibens), können Sie die Logik ein wenig mehr bereinigen (IMO).
quelle
Jetzt, wo wir Object.fromEntries haben:
oder
quelle
Als Ergänzung zu den Antworten von @joslarson und @jPO:
Ohne ES6 können Sie und den Komma-Operator verwenden :
Object.keys
Array.reduce
Einige mögen es hässlich finden, aber es ist "irgendwie" schneller, da
reduce
es nicht alle Eigenschaften vonobj
auf jeder Schleife verbreitet.quelle
forEach
,map
oderreduce
Methoden. Ich habe diese Antwort gegeben, um eine Einzeiler-Lösung ohne die Notwendigkeit von es6 zu haben und dennoch in Bezug auf Geschwindigkeit / Effektivität relevant zu sein.Versuchen
Code-Snippet anzeigen
quelle
Die kürzeste, die ich mir mit ES6 ausgedacht habe.
quelle
Verwenden von Ramda :
quelle
Ich glaube, es ist besser, diese Aufgabe mit einem npm-Modul zu erledigen, wie z
invert-kv
.invert-kv : Invertiert den Schlüssel / Wert eines Objekts. Beispiel: {foo: 'bar'} → {bar: 'foo'}
https://www.npmjs.com/package/invert-kv
quelle
Mit reinem Ramda in einem reinen und punktfreien Stil:
Oder mit einer etwas komplizierteren ES6-Version immer noch rein funktional:
quelle
quelle
object
?map
soll tun, du benutzt es hier wieforEach
Hier ist eine rein funktionale Implementierung von Flipping
keys
undvalues
in ES6:Typoskript
JavaScript
quelle
Dies kann Ihr Objekt
{A : 1, B : 2, C : 3, D : 4}
Array-artig machen, so dass Sie haben könnenquelle
Hier ist eine Option, die Schlüssel mit Werten austauscht, aber keine Duplikate verliert. Wenn Ihr Objekt: {a: 1, b: 2, c: 2} lautet, gibt es immer ein Array in der Ausgabe zurück:
quelle