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'));

Answers:


320

从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]

感谢远胜于_.toArray(_.mapValues(users, 'id'))
YarGnawh 2015年

1
我如何获取带有id的名称,我的意思是我们如何获取两个以上的值?
约翰

6
@John users.map(({ id, name }) => ({ id, name }))或更隐秘users.map(user => ({ id: user.id, name: user.name }))。同样在lodash中:_.map(users, ({ id, name }) => ({ id, name }))
dfsq,2013年

@dfsq,这是将对象添加到输出数组时的好解决方案。谢谢!
泰德·科里昂

17

使用纯JS:

var userIds = users.map( function(obj) { return obj.id; } );

3
您可以将其简化为var userIds = users.map(obj => obj.id);
卡米尔·纳雅

站起来users.map(({id})=>id)
Artur Tagisow

15

在新的lodash版本v4.0.0中 _.pluck中,删除了_.map

然后,您可以使用以下代码:

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

您可以在Github Changelog中看到


4

而且,如果您需要从每个对象中提取多个属性,则

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

2

通过ES6获得它的简单甚至更快的方法

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


-17

这将在弹出窗口中为您提供所需的内容。

for(var i = 0; i < users.Count; i++){
   alert(users[i].id);  
}

2
这是一次遍历数组一个元素。数组是索引的数据结构,其中包含来自某些数据类型的值(在本示例中为对象)。只能通过评估数组索引中的元素来访问对象。循环就是实现这一目标的结构。
user1789573'2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.