La map
fonction dans underscore.js, si elle est appelée avec un objet javascript, retourne un tableau de valeurs mappées à partir des valeurs de l'objet.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
y a-t-il un moyen de lui faire conserver les clés? c'est à dire, je veux une fonction qui retourne
{one: 3, two: 6, three: 9}
javascript
underscore.js
lodash
xuanji
la source
la source
Réponses:
Avec soulignement
Underscore fournit une fonction
_.mapObject
pour mapper les valeurs et conserver les clés.DEMO
Avec Lodash
Lodash fournit une fonction
_.mapValues
pour mapper les valeurs et conserver les clés.DEMO
la source
_.map()
renvoie[['one', 3], ['two', 6], ['three', 9]]
, qui est un tableau de tableaux, et le_.object()
transforme en objet.J'ai réussi à trouver la fonction requise dans lodash, une bibliothèque utilitaire similaire au soulignement.
http://lodash.com/docs#mapValues
la source
la source
Je sais que c'est vieux, mais maintenant Underscore a une nouvelle carte pour les objets:
Vous pouvez bien sûr créer une carte flexible pour les tableaux et les objets
la source
mapObject
; regardez plutôt lamapValues
méthode de lodash .Que diriez-vous de cette version en JS ordinaire ( ES6 / ES2015 )?
jsbin
Si vous voulez mapper sur un objet de manière récursive (mapper obj imbriqué), cela peut être fait comme ceci:
jsbin
Depuis ES7 / ES2016, vous pouvez utiliser
Object.entries
au lieu deObject.keys
ceci:la source
Je sais que cela fait longtemps, mais la solution la plus évidente via le repli (aka réduire en js) est manquante, par souci d'exhaustivité, je la laisserai ici:
la source
_.map renvoie un tableau, pas un objet.
Si vous voulez un objet, il vaut mieux utiliser une fonction différente, comme
each
; si vous voulez vraiment utiliser map, vous pouvez faire quelque chose comme ceci:mais c'est déroutant, quand
map
on voit, on s'attendrait à avoir un tableau comme résultat et à en faire quelque chose.la source
map
est utilisée pour modifier une entrée produisant un tableau en sortie, vous pouvez composer_.object
et en_.map
tant que @GG. écrit, mais c'est une question de goût à ce stade.Je pense que vous voulez une fonction mapValues (pour mapper une fonction sur les valeurs d'un objet), qui est assez facile à implémenter vous-même:
la source
la source
Un correctif de mix pour le bogue de la carte de soulignement : P
Une solution de contournement simple qui garde la bonne clé et la renvoie en tant qu'objet Elle est toujours utilisée de la même manière qu'en invité, vous pouvez utiliser cette fonction pour remplacer la fonction bugy _.map
ou tout simplement comme je l'ai utilisé comme mixin
la source
Vous pouvez utiliser
_.mapValues(users, function(o) { return o.age; });
dans Lodash et_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
Underscore.Consultez la documentation croisée ici: http://jonathanpchen.com/underdash-api/#mapvalues-object-iteratee-identity
la source