LoDash: obtenga una matriz de valores de una matriz de propiedades de objeto

161

Estoy seguro de que está en algún lugar dentro de los documentos de LoDash, pero parece que no puedo encontrar la combinación correcta.

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
fuente

Respuestas:

321

Desde la versión v4.x deberías usar _.map:

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

de esta manera corresponde al método nativo Array.prototype.map donde escribirías (sintaxis ES2015):

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

Antes de v4.x podría usar _.pluckla misma manera:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
fuente
gracias mucho mejor que_.toArray(_.mapValues(users, 'id'))
YarGnawh
1
¿Cómo puedo obtener el nombre con id? Quiero decir, ¿cómo podemos obtener más de dos valores?
John
66
@John users.map(({ id, name }) => ({ id, name }))o menos críptico users.map(user => ({ id: user.id, name: user.name })). Igual en lodash: _.map(users, ({ id, name }) => ({ id, name })).
dfsq
@dfsq, es una buena solución al agregar objetos a la matriz de salida. ¡Gracias!
Ted Corleone
17

Con puro JS:

var userIds = users.map( function(obj) { return obj.id; } );
c-smile
fuente
3
Puede simplificar esto en var userIds = users.map (obj => obj.id);
Kamil Naja
Sube a mi nivelusers.map(({id})=>id)
Artur Tagisow
15

En la nueva versión lodash v4.0.0 se _.pluck ha eliminado a favor de_.map

Entonces puedes usar esto:

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

Puedes ver en el registro de cambios de Github

iarroyo
fuente
4

Y si necesita extraer varias propiedades de cada objeto, entonces

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

Forma simple e incluso más rápida de obtenerlo a través de ES6

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

Si está utilizando JavaScript nativo, puede usar este código:

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Pankaj Bisht
fuente
El OP solicitó explícitamente una solución de Lodash.
Ariel Weinberger
-17

Esto te dará lo que quieres en una ventana emergente.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
usuario1789573
fuente
2
Es recorrer el conjunto un elemento a la vez. Una matriz es una estructura de datos de índice (es) con valores de algún tipo de datos (en este ejemplo, son objetos). Solo se puede acceder a los objetos evaluando los elementos en el índice de la matriz. El bucle es la estructura que logra esto.
user1789573