LoDash: получить массив значений из массива свойств объекта

161

Я уверен, что это где-то внутри документации LoDash, но я не могу найти правильную комбинацию.

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
источник

Ответы:

321

Начиная с версии v4.x вы должны использовать _.map:

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

таким образом, он соответствует встроенному методу Array.prototype.map, в который вы напишите (синтаксис ES2015):

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

До v4.x вы могли использовать _.pluckтот же способ:

_.pluck(users, 'id'); // [12, 14, 16, 18]
dfsq
источник
спасибо намного лучше чем_.toArray(_.mapValues(users, 'id'))
YarGnawh
1
Как я могу получить имя с идентификатором, я имею в виду, как мы можем получить более двух значений?
Джон
6
@ Джон users.map(({ id, name }) => ({ id, name }))или менее загадочный users.map(user => ({ id: user.id, name: user.name })). То же самое в Лодаш _.map(users, ({ id, name }) => ({ id, name })).
Dfsq
@dfsq, это хорошее решение при добавлении объектов в выходной массив. Спасибо!
Тед Корлеоне
17

С чистым JS:

var userIds = users.map( function(obj) { return obj.id; } );
с-улыбка
источник
3
Вы можете упростить это в var userIds = users.map (obj => obj.id);
Камиль Наджа
Получить на моем уровнеusers.map(({id})=>id)
Артур Tagisow
15

В новой версии lodash v4.0.0 _.pluck убрал в пользу_.map

Тогда вы можете использовать это:

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

Вы можете увидеть в Github Changelog

iarroyo
источник
4

И если вам нужно извлечь несколько свойств из каждого объекта, то

let newArr = _.map(arr, o => _.pick(o, ['name', 'surname', 'rate']));
Андрей
источник
2

Простой и еще более быстрый способ получить его через ES6

let newArray = users.flatMap(i => i.ID) // -> [ 12, 13, 14, 15 ]
GYTO
источник
-2

Если вы используете нативный JavaScript, вы можете использовать этот код -

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

    return obj.id;
})

console.log(ids); //[12, 14, 16, 18]
Панкадж Бишт
источник
ОП явно попросил решение Lodash.
Ариэль Вайнбергер
-17

Это даст вам то, что вы хотите во всплывающем окне.

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}
user1789573
источник
2
Это цикл по массиву по одному элементу за раз. Массив - это структура данных индекса (ов) со значениями в нем из некоторого типа данных (в данном примере это объекты). Доступ к объектам возможен только путем оценки элементов в индексе массива. Цикл - это структура, которая достигает этого.
user1789573