L'équivalent de trait de Soulignement _.plumer en JavaScript
Je suis en train de recréer le trait de Soulignement arracher la fonction à l'aide de pure JS. Cependant, je reçois un tableau de undefineds être retourné, au lieu de la valeur réelle des propriétés des objets dans un tableau.
De vérifier un autre thread ici j'ai trouvé que vous pouvez reproduire en jQuery avec le code suivant...
$.pluck = function(arr, key) {
return $.map(arr, function(e) { return e[key]; })
}
...cependant, je vais avoir de la difficulté à reproduire simplement ce dans le plus pur JS. J'ai essayé le suivant, mais ce n'est qu'en retournant un tableau de undefineds pour moi.
var pluck = function(arr,key){
var newArr = [];
for (var i = 0, x = arr.length; i < x; i++){
if (arr[i].hasOwnProperty(key)){
newArr.push(arr[i].key)
}
}
return newArr;
}
Ainsi, le but serait la suivante, sauf qu'au lieu d'utiliser le trait de soulignement"_.plumer, il suffit d'utiliser un JS nom de la fonction, par exemple. var arracher = function(arr,key){...}
var Tuts = [{name : 'NetTuts', niche : 'Web Development'}, {name : 'WPTuts', niche : 'WordPress'}, {name : 'PSDTuts', niche : 'PhotoShop'}, {name : 'AeTuts', niche : 'After Effects'}];
var niches = _.pluck(Tuts, 'niche');
console.log(niches);
//["Web Development", "WordPress", "PhotoShop", "After Effects"]
Quelqu'un pourrait-il m'orienter dans la bonne direction?
- La bonne chose à propos de Souligner, c'est que son code source est disponible en ligne dans annoté de la forme, de sorte qu'il est assez facile de le lire et de voir ce qu'ils font. Voici la source pour
_.pluck()
, bien qu'il est principalement composé de_.map()
et_.property()
.
Vous devez vous connecter pour publier un commentaire.
Dans l'ES5:
Dans ES6:
theArray.map(item => item.theKey)
sans créerpluck
fonction.const pluck = (arr, key) => arr.map(o => o[key])
Vous pouvez le faire avec du JavaScript natif
.map()
:modifier — modification intégrée prototype des objets doit être fait avec soin; une meilleure façon d'ajouter de la fonction (si vous êtes OK avec l'idée de le faire en général) serait avec
Object.defineProperty
de sorte qu'il peut être rendu non énumérable:map
est IE9+ seulement..map()
est sur le prototype c'est symétrique pour.pluck()
d'être là. Cependant, je vais ammend la réponse avec la bonne façon de l'ajouter.Vous sont proches. Vous avez besoin de changer:
à:
Considérez ceci:
Espère que vous comprenez mon point.
obj['my weird key...']
est valide alors queobj.my weird key...
lèvera une erreur de syntaxe. Vous aurez également besoin d'écrireobj['enum']
,obj['catch']
lors du ciblage < IE9Voici un solution de travail
Je n'ai pas vraiment changer grand chose. La raison pour laquelle votre code échoué, c'est parce que vous avez utilisé l'opérateur point
.key
pour accéder à la propriété nommée des éléments du tableau à la place du support de l'opérateur[key]
. Lors de l'utilisation d'une référence comme l'un des principaux que vous devez utiliser le support de l'opérateur.push()
?Quelle est la réduire:
JSFiddle
Vous pouvez utiliser cette fonction, cliquez sur dans JSFiddle pour voir un Exemple!! 🙂
[{id: 1, name: 'Pedro'}, {id: 2, name: 'Joao'}]