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'));

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]

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; } );

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


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']));

2

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

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

-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]

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);  
}

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.