使用lodash从数组返回对象属性

Sal*_*man 21 javascript lodash

我一直试图通过首先过滤它来返回对象的属性.这是我做的:

var characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true },
  { 'name': 'pebbles', 'age': 1,  'blocked': false }
];

_.find(characters, function(chr) {
     return  chr.age == 40
});
Run Code Online (Sandbox Code Playgroud)

它返回整个对象,因为我想返回特定属性.任何人都可以指导我如何做到这一点?

任何帮助将不胜感激.

aym*_*met 51

你可以使用Lodash 链接能力.顾名思义,它使您能够链接Lodash方法调用._.filter_.map这里是合适的:

const characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true  },
  { 'name': 'pebbles', 'age': 1,  'blocked': false },
]

const names = _(characters)
  .filter(c => c.age < 40)
  .map('name')
  .value()

alert(names)
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)


为了记录,这是你在纯JS中的表现:

const characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true  },
  { 'name': 'pebbles', 'age': 1,  'blocked': false },
]

const names = characters
  .filter(c => c.age < 40)
  .map(c => c.name)

alert(names)
Run Code Online (Sandbox Code Playgroud)

  • `pluck`不再是lodash :( (4认同)

Chu*_*ang 7

_.属性

var array = [{a: 1, b: 2}, {a: 3, b: 4}]
array.map(_.property('a')) // => [1, 3]
Run Code Online (Sandbox Code Playgroud)

_.map简写

var array = [{a: 1, b: 2}, {a: 3, b: 4}]
_.map(array, 'a') // => [1, 3]
Run Code Online (Sandbox Code Playgroud)


Nin*_*nja 7

_.result(_.find(characters, function(obj) {
       return obj.age === 40;
}), 'name');
Run Code Online (Sandbox Code Playgroud)