LoDash: Dapatkan array nilai dari array properti objek

161

Saya yakin itu ada di suatu tempat di dalam LoDash docs, tapi sepertinya saya tidak dapat menemukan kombinasi yang tepat.

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
sumber

Jawaban:

321

Sejak versi v4.x Anda harus menggunakan _.map:

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

cara ini sesuai dengan metode Array.prototype.map asli di mana Anda akan menulis (sintaks ES2015):

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

Sebelum v4.x Anda bisa menggunakan _.pluckcara yang sama:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
sumber
terima kasih jauh lebih baik daripada_.toArray(_.mapValues(users, 'id'))
YarGnawh
1
bagaimana saya bisa mendapatkan nama dengan id, maksud saya bagaimana kita bisa mengambil lebih dari dua nilai?
John
6
@ John users.map(({ id, name }) => ({ id, name }))atau kurang samar users.map(user => ({ id: user.id, name: user.name })). Sama di lodash: _.map(users, ({ id, name }) => ({ id, name })).
dfsq
@dfsq, ini solusi yang baik sambil menambahkan objek ke dalam array output. Terima kasih!
Ted Corleone
17

Dengan JS murni:

var userIds = users.map( function(obj) { return obj.id; } );
c-senyum
sumber
3
Anda dapat menyederhanakan ini menjadi var userIds = users.map (obj => obj.id);
Kamil Naja
users.map(({id})=>id)
Tingkatkan
15

Dalam rilis baru lodash v4.0.0_.pluck telah dihapus mendukung_.map

Maka Anda dapat menggunakan ini:

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

Anda dapat melihat di Github Changelog

iarroyo
sumber
4

Dan jika Anda perlu mengekstrak beberapa properti dari setiap objek, maka

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

Cara sederhana dan lebih cepat untuk mendapatkannya melalui ES6

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

Jika Anda menggunakan javascript asli maka Anda dapat menggunakan kode ini -

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Pankaj Bisht
sumber
OP secara eksplisit meminta solusi Lodash.
Ariel Weinberger
-17

Ini akan memberi Anda apa yang Anda inginkan dalam pop-up.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
pengguna1789573
sumber
2
Ini untuk mengulang elemen array satu per satu. Array adalah struktur data indeks dengan nilai di dalamnya dari beberapa tipe data (dalam contoh ini objek). Objek hanya dapat diakses dengan mengevaluasi elemen-elemen dalam indeks array. Loop adalah struktur yang mencapai ini.
user1789573