LoDash: ottiene una matrice di valori da una matrice di proprietà dell'oggetto


161

Sono sicuro che si trova da qualche parte nei documenti di LoDash, ma non riesco a trovare la giusta combinazione.

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

Risposte:


321

Dalla versione v4.x dovresti usare _.map:

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

in questo modo corrisponde al metodo nativo Array.prototype.map in cui scrivere (sintassi ES2015):

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

Prima di v4.x è possibile utilizzare _.pluckallo stesso modo:

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

grazie molto meglio di_.toArray(_.mapValues(users, 'id'))
YarGnawh

1
come posso ottenere il nome con ID, intendo come possiamo recuperare più di due valori?
Giovanni

6
@John users.map(({ id, name }) => ({ id, name }))o meno criptico users.map(user => ({ id: user.id, name: user.name })). Stesso in lodash: _.map(users, ({ id, name }) => ({ id, name })).
dfsq,

@dfsq, è un'ottima soluzione durante l'aggiunta di oggetti nell'array di output. Grazie!
Ted Corleone,

17

Con JS puro:

var userIds = users.map( function(obj) { return obj.id; } );

3
Puoi semplificarlo in var userIds = users.map (obj => obj.id);
Kamil Naja,

Sali sul mio livellousers.map(({id})=>id)
Artur Tagisow il

15

Nella nuova versione di lodash la versione 4.0.0 _.pluck è stata rimossa a favore di_.map

Quindi puoi usare questo:

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

Puoi vedere nel log delle modifiche di Github


4

E se hai bisogno di estrarre diverse proprietà da ciascun oggetto, allora

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

2

Modo semplice e ancora più veloce per ottenerlo tramite ES6

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

-2

Se si utilizza JavaScript nativo, è possibile utilizzare questo codice -

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]

L'OP ha chiesto esplicitamente una soluzione Lodash.
Ariel Weinberger,

-17

Questo ti darà quello che vuoi in un pop-up.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}

2
Serve per passare in rassegna l'array un elemento alla volta. Un array è una struttura di dati di indice (i) con valori in esso contenuti da alcuni tipi di dati (in questo esempio sono oggetti). È possibile accedere agli oggetti solo valutando gli elementi nell'indice dell'array. Il loop è la struttura che raggiunge questo obiettivo.
user1789573,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.