LoDash:从对象属性数组中获取值数组

Yar*_*awh 144 javascript lodash

我确定它在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'));
Run Code Online (Sandbox Code Playgroud)

dfs*_*fsq 290

从版本v4.x开始,您应该使用_.map:

_.map(users, 'id'); // [12, 14, 16, 18]
Run Code Online (Sandbox Code Playgroud)

这样它就对应于您要编写的本机Array.prototype.map方法(ES2015语法):

users.map(user => user.id); // [12, 14, 16, 18]
Run Code Online (Sandbox Code Playgroud)

在v4.x之前,您可以使用_.pluck相同的方式:

_.pluck(users, 'id'); // [12, 14, 16, 18]
Run Code Online (Sandbox Code Playgroud)

  • @John`users.map(({id,name})=>({id,name}))`或更少含糊的`users.map(user =>({id:user.id,name:user.name} ))`.在lodash中也是如此:`_. map(users,({id,name})=>({id,name}))`. (6认同)

c-s*_*ile 17

使用纯JS:

var userIds = users.map( function(obj) { return obj.id; } );
Run Code Online (Sandbox Code Playgroud)

  • 进入我的级别 `users.map(({id})=>id)` (6认同)
  • 您可以将其简化为 var userIds = users.map( obj => obj.id ); (3认同)

iar*_*oyo 14

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

然后你可以使用这个:

_.map(users, 'id'); // [12, 14, 16, 18]
Run Code Online (Sandbox Code Playgroud)

你可以在Github Changelog中看到


GYT*_*YTO 11

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

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

  • 我知道`map()`和`flatMap()`的不同。只是想知道为什么在这种情况下您建议使用“flatMap()”,而已经有“map()”的答案。如果您能详细说明何时应该使用“flatMap()”而不是“map()”,那就太好了。 (3认同)

And*_*rey 10

如果您需要从每个对象中提取多个属性,那么

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