Die map
Funktion in underscore.js gibt, wenn sie mit einem Javascript-Objekt aufgerufen wird, ein Array von Werten zurück, die aus den Werten des Objekts zugeordnet sind.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
Gibt es eine Möglichkeit, die Schlüssel zu erhalten? dh ich möchte eine Funktion, die zurückgibt
{one: 3, two: 6, three: 9}
javascript
underscore.js
lodash
Xuanji
quelle
quelle
Antworten:
Mit Unterstrich
Der Unterstrich bietet eine Funktion
_.mapObject
zum Zuordnen der Werte und zum Beibehalten der Schlüssel.DEMO
Mit Lodash
Lodash bietet eine Funktion
_.mapValues
zum Zuordnen der Werte und zum Beibehalten der Schlüssel.DEMO
quelle
_.map()
wird zurückgegeben[['one', 3], ['two', 6], ['three', 9]]
, bei dem es sich um ein Array von Arrays handelt, und_.object()
es wird wieder in ein Objekt umgewandelt.Ich habe es geschafft, die erforderliche Funktion in lodash zu finden, einer Utility-Bibliothek, die dem Unterstrich ähnelt.
http://lodash.com/docs#mapValues
quelle
quelle
Ich weiß, dass dies alt ist, aber jetzt hat Underscore eine neue Karte für Objekte:
Sie können natürlich eine flexible Karte für Arrays und Objekte erstellen
quelle
mapObject
; Schauen Sie sich stattdessen diemapValues
Methode von lodash an .Wie wäre es mit dieser Version in einfachem JS ( ES6 / ES2015 )?
jsbin
Wenn Sie ein Objekt rekursiv zuordnen möchten (verschachteltes Objekt zuordnen), können Sie dies folgendermaßen tun:
jsbin
Seit ES7 / ES2016 können Sie
Object.entries
stattdessen Folgendes verwendenObject.keys
:quelle
Ich weiß, es ist lange her, aber es fehlt immer noch die naheliegendste Lösung über Fold (auch bekannt als Reduzieren in js). Der Vollständigkeit halber werde ich sie hier belassen:
quelle
_.map gibt ein Array zurück, kein Objekt.
Wenn Sie ein Objekt möchten, sollten Sie eine andere Funktion verwenden, z
each
. Wenn Sie wirklich eine Karte verwenden möchten, können Sie Folgendes tun:aber das ist verwirrend, wenn man sieht
map
, dass man ein Array als Ergebnis erwartet und dann etwas daraus macht.quelle
map
verwendet wird, um eine Eingabe zu ändern, die ein Array als Ausgabe erzeugt, die Sie komponieren_.object
und_.map
als @GG. schrieb, aber das ist an dieser Stelle Geschmackssache.Ich denke, Sie möchten eine mapValues- Funktion (um eine Funktion über die Werte eines Objekts abzubilden), die einfach genug ist, um sich selbst zu implementieren:
quelle
quelle
Ein Mix-Fix für den Unterstrich-Map- Fehler : P.
Eine einfache Problemumgehung, bei der der richtige Schlüssel beibehalten und als Objekt zurückgegeben wird. Sie wird immer noch genauso verwendet wie ich als Gast. Mit dieser Funktion können Sie die fehlerhafte Funktion _.map überschreiben
oder einfach so wie ich es als Mixin benutzt habe
quelle
Sie können
_.mapValues(users, function(o) { return o.age; });
in Lodash und_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
in Unterstrich verwenden.Die Dokumentation finden Sie hier: http://jonathanpchen.com/underdash-api/#mapvalues-object-iteratee-identity
quelle