Quel est l'objet de l'équivalent de _.plumer
J'ai re-mise en œuvre ma propre version de ce dont j'ai besoin mais je crois que cela est déjà inclus dans le souligner puisque c'est si simple et si étroitement liée à de nombreuses autres fonctions. Mais je ne peux pas penser à ce qu'il devrait être appelé.
Fondamentalement, ce que je veux, c'est une version de _.plumer qui fonctionne avec les objets et retourne un objet au lieu d'un tableau (avec ses touches associées).
Ainsi, par exemple, si j'avais un objet comme celui-ci:
elements: {
steam: {
temperature: 100,
color: 'orange',
state: 'gas'
},
water: {
temperature: 50,
color: 'blue',
state: 'liquid'
},
ice: {
temperature: 0,
color: 'white',
state: 'solid'
}
}
Je veux appeler _.something(elements, 'temperature')
Et de l'avoir de retour
{
steam: 100,
water: 50,
ice: 0
}
Au lieu de _.pluck(elements, 'temperature')
qui renvoie
[100, 50, 0]
Qu'est-ce que cette transformation a appelé et est-il déjà inclus dans le trait de soulignement? J'ai écrit une version rapide de moi-même avec du jQuery chaque boucle depuis que je suis plus familier avec jQuery que le trait de soulignement (inclus ci-dessous), mais préfèrent utiliser l'une à partir de la bibliothèque, si possible.
$.objPluck = function(obj, key) {
var ret = {};
$.each(obj, function(k, value) {
ret[k] = value[key];
});
return ret;
}
Array.map
méthode ce qui est essentiellement ce que vous faites, mais avec un objetEst-il un moyen de faire
Array.map
préserver les touches?Je ne suis pas sûr que je comprends ce que tu veux. Et de toute façon, j'étais juste se référant à votre préoccupation initiale de
But I can't think of what it should be called
. Avec les tableaux, je parlerais de cette "cartographie"OriginalL'auteur Brad Dwyer | 2013-08-13
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de méthode pour faire exactement ce à souligner 1.4.4, mais si vous voulez rester dans le trait de soulignement, vous pouvez le faire
Démo sur jsfiddle courtoisie de bfavaretto
Que de souligner 1.8.3, ce qui peut être fait de façon succincte, avec
_.mapObject(elements, 'temperature');
.Mise à jour de la démo
upvoted votre commentaire, que j'ai oublié d'inscrire mon violon. J'ai également vu les 4 secondes, votre post a été! 😛
C'était en fait 12 secondes! 🙂
Merci!!!! N'avais même pas pensé à l'aide d'un composite de plusieurs _ fonctions.
Pour les versions plus récentes de souligner, il y a une fonction qui le fait directement:
mapObject
. C'est l'équivalent demapValues
dans lodash.OriginalL'auteur Mathletics
Intéressant d'ajouter ici une solution qui utilise ES6 flèche fonctions, etc:
Notez que cela ne fonctionne pas sur les anciens moteurs javascript, mais dans node.js 0,12 avec
--harmony
il fonctionne très bien, ou avec node.js 4.x et versions ultérieures. Je viens de tester cela en Chrome 46 et il fonctionne très bien.Il a l'avantage de ne pas avoir besoin de toutes les bibliothèques supplémentaires, tels que le caractère de soulignement ou lodash, mais bien sûr ne fonctionne que sur les nouvelles JS moteurs.
Mais où est le plaisir dans tout cela? 😉
utile 4 quelqu'un peut-être...
Cette technique est utile, mais attention ce n'est pas revenir à l'objet de l'interlocuteur voulait, elle retourne un tableau sans les noms d'éléments.
OriginalL'auteur taxilian
sur lodash (similaire à trait de soulignement) , vous pouvez utiliser
_.mapValues(elements,'temperature')
.il est de retour
{steam: 100, water: 50, ice: 0}
lodash ref : _.mapValues
par la façon dont vous pouvez utiliser
_.mapKeys
de construire l'objet de hachage dans une ligne_.mapKeys(elements,'color') //{orange: Object, blue: Object, white: Object}
OriginalL'auteur pery mimon
Vous n'avez pas besoin de la 3e partie des bibliothèques pour faciliter des trucs comme ça
OriginalL'auteur daino3
Dans des versions plus récentes, il est en fait un construit en fonction de qui le fait.
Si vous donnez une chaîne de caractères, au lieu d'une fonction, à
mapObject
, il va interpréter que comme un nom de propriété et de se comporter comme un "pluckObject
". La plupart des fonctions sont étonnamment libéral dans ce qu'ils acceptent.Si vous voulez une fonction explicite de l'objectif, vous pouvez regarder comment
_.pluck
est mise en œuvre et écrire votre propre analogue version:C'est un peu redondant, mais il rend vos intentions claires.
OriginalL'auteur Hjulle
Vous pouvez utiliser un JavaScript pour-en boucle pour itérer sur les touches de l'objet:
Ci-dessus est un exemple simplifié, mais vous devriez être en mesure de modifier facilement à encapsuler en plus de la fonction générique. Aussi, vous n'avez pas vraiment besoin d'utiliser JQuery ici - JavaScript natif de la mise en œuvre sera plus rapide.
La
obj.hasOwnProperty(name)
case est recommandé par JSLint.OriginalL'auteur Zorayr