LoDash: obtém uma matriz de valores de uma matriz de propriedades de objetos

161

Tenho certeza de que está em algum lugar dentro dos documentos LoDash, mas não consigo encontrar a combinação certa.

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
fonte

Respostas:

321

Desde a versão v4.x, você deve usar _.map:

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

dessa maneira, corresponde ao método Array.prototype.map nativo , onde você escreveria (sintaxe ES2015):

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

Antes da v4.x, você podia usar _.pluckda mesma maneira:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
fonte
obrigado muito melhor do que:_.toArray(_.mapValues(users, 'id'))
YarGnawh
1
como posso obter nome com id, quero dizer, como podemos buscar mais de dois valores?
John John
6
@ John users.map(({ id, name }) => ({ id, name }))ou menos enigmático users.map(user => ({ id: user.id, name: user.name })). Lodash na mesma: _.map(users, ({ id, name }) => ({ id, name })).
precisa
@dfsq, é uma boa solução ao adicionar objetos na matriz de saída. Obrigado!
Ted Corleone
17

Com JS puro:

var userIds = users.map( function(obj) { return obj.id; } );
sorriso
fonte
3
Você pode simplificar isso em var userIds = users.map (obj => obj.id);
Kamil Naja
Entre no meu nívelusers.map(({id})=>id)
Artur Tagisow 30/03
15

No novo lodash, a versão v4.0.0 _.pluck foi removida a favor de_.map

Então você pode usar isso:

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

Você pode ver no Github Changelog

iarroyo
fonte
4

E se você precisar extrair várias propriedades de cada objeto, então

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

Maneira simples e mais rápida de obtê-lo via ES6

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

Se você estiver usando javascript nativo, poderá usar este código -

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Pankaj Bisht
fonte
O OP solicitou explicitamente uma solução Lodash.
Ariel Weinberger
-17

Isso lhe dará o que você deseja em um pop-up.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
user1789573
fonte
2
É para percorrer a matriz um elemento de cada vez. Uma matriz é uma estrutura de dados de índice (s) com valores de algum tipo de dado (neste exemplo, são objetos). Os objetos só podem ser acessados ​​avaliando os elementos no índice da matriz. O loop é a estrutura que consegue isso.
user1789573