LoDash: Obtenez un tableau de valeurs à partir d'un tableau de propriétés d'objet

161

Je suis sûr que c'est quelque part dans la documentation LoDash, mais je n'arrive pas à trouver la bonne combinaison.

var users = [{
      id: 12,
      name: Adam
   },{
      id: 14,
      name: Bob
   },{
      id: 16,
      name: Charlie
   },{
      id: 18,
      name: David
   }
]

// how do I get [12, 14, 16, 18]
var userIds = _.map(users, _.pick('id'));
YarGnawh
la source

Réponses:

321

Depuis la version v4.x, vous devez utiliser _.map:

_.map(users, 'id'); // [12, 14, 16, 18]

de cette façon, il correspond à la méthode native Array.prototype.map où vous écririez (syntaxe ES2015):

users.map(user => user.id); // [12, 14, 16, 18]

Avant la v4.x, vous pouviez utiliser _.pluckla même manière:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
la source
merci beaucoup mieux que_.toArray(_.mapValues(users, 'id'))
YarGnawh
1
comment puis-je obtenir un nom avec un identifiant, je veux dire comment pouvons-nous récupérer plus de deux valeurs?
John
6
@John users.map(({ id, name }) => ({ id, name }))ou moins cryptique users.map(user => ({ id: user.id, name: user.name })). Même dans lodash: _.map(users, ({ id, name }) => ({ id, name })).
dfsq
@dfsq, c'est une bonne solution lors de l'ajout d'objets dans le tableau de sortie. Merci!
Ted Corleone
17

Avec pur JS:

var userIds = users.map( function(obj) { return obj.id; } );
sourire
la source
3
Vous pouvez simplifier cela en var userIds = users.map (obj => obj.id);
Kamil Naja
Montez à mon niveauusers.map(({id})=>id)
Artur Tagisow
15

Dans la nouvelle version de lodash v4.0.0 _.pluck a été supprimée au profit de_.map

Ensuite, vous pouvez utiliser ceci:

_.map(users, 'id'); // [12, 14, 16, 18]

Vous pouvez voir dans Github Changelog

iarroyo
la source
4

Et si vous avez besoin d'extraire plusieurs propriétés de chaque objet, alors

let newArr = _.map(arr, o => _.pick(o, ['name', 'surname', 'rate']));
Andreï
la source
2

Un moyen simple et encore plus rapide de l'obtenir via ES6

let newArray = users.flatMap(i => i.ID) // -> [ 12, 13, 14, 15 ]
GYTO
la source
-2

Si vous utilisez du javascript natif, vous pouvez utiliser ce code -

let ids = users.map(function(obj, index) {

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Pankaj Bisht
la source
L'OP a explicitement demandé une solution Lodash.
Ariel Weinberger le
-17

Cela vous donnera ce que vous voulez dans un pop-up.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
user1789573
la source
2
Il s'agit de parcourir le tableau un élément à la fois. Un tableau est une structure de données d'index (s) contenant des valeurs provenant d'un type de données (dans cet exemple, ce sont des objets). Les objets ne sont accessibles qu'en évaluant les éléments dans l'index du tableau. La boucle est la structure qui réalise cela.
user1789573