LoDash: pobierz tablicę wartości z tablicy właściwości obiektu

161

Jestem pewien, że jest gdzieś w dokumentacji LoDash, ale nie mogę znaleźć odpowiedniej kombinacji.

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
źródło

Odpowiedzi:

321

Od wersji v4.x powinieneś używać _.map:

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

w ten sposób odpowiada natywnej metodzie Array.prototype.map , w której należy napisać (składnia ES2015):

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

Przed wersją 4.x można było używać _.plucktego samego sposobu:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
źródło
dzięki dużo lepiej niż_.toArray(_.mapValues(users, 'id'))
YarGnawh
1
jak mogę uzyskać nazwę z identyfikatorem, mam na myśli, jak możemy pobrać więcej niż dwie wartości?
John
6
@Jan users.map(({ id, name }) => ({ id, name }))lub mniej tajemniczy users.map(user => ({ id: user.id, name: user.name })). Sama lodash w: _.map(users, ({ id, name }) => ({ id, name })).
dfsq
@dfsq, to ​​dobre rozwiązanie podczas dodawania obiektów do tablicy wyjściowej. Dzięki!
Ted Corleone
17

Z czystym JS:

var userIds = users.map( function(obj) { return obj.id; } );
c-uśmiech
źródło
3
Możesz uprościć to do var userIds = users.map (obj => obj.id);
Kamil Naja
Wejdź na mój poziomusers.map(({id})=>id)
Artur Tagisow
15

W nowej wersji lodash wersja 4.0.0 _.pluck została usunięta na korzyść_.map

Następnie możesz użyć tego:

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

Możesz zobaczyć w Github Changelog

iarroyo
źródło
4

A jeśli chcesz wyodrębnić kilka właściwości z każdego obiektu, to

let newArr = _.map(arr, o => _.pick(o, ['name', 'surname', 'rate']));
Andrey
źródło
2

Prosty i jeszcze szybszy sposób na uzyskanie go przez ES6

let newArray = users.flatMap(i => i.ID) // -> [ 12, 13, 14, 15 ]
GYTO
źródło
-2

Jeśli używasz natywnego javascript, możesz użyć tego kodu -

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Pankaj Bisht
źródło
OP wyraźnie poprosił o rozwiązanie firmy Lodash.
Ariel Weinberger
-17

To da ci to, czego chcesz w wyskakującym okienku.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
user1789573
źródło
2
Służy do przechodzenia przez tablicę po jednym elemencie na raz. Tablica to struktura danych zawierająca indeks (y) z wartościami z pewnego typu danych (w tym przykładzie są to obiekty). Dostęp do obiektów można uzyskać tylko poprzez ocenę elementów w indeksie tablicy. Pętla to struktura, która to osiąga.
user1789573