I have been trying to return a property of an object by filtering it first. Here\'s what I did:
var characters = [
{ \'name\': \'barney\', \'age\': 36, \'bloc
You could use the Lodash chaining ability. As its name implies, it enables you to chain Lodash methods calls. _.filter and _.map are appropriate here:
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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.min.js"></script>
For the record, this is how you can do in pure 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)
_.result(_.find(characters, function(obj) {
return obj.age === 40;
}), 'name');
As elclanrs mentioned in comment before obvious solution is just to access the property age
after you filtered the object.
But if you wanted to be done in method, you can first extract all age values and then allpy find
function on them:
var ageValues = _.pluck(characters, 'age'); //returns [36, 40, 1]
var resultAgeValue = _.find(ageValues, function(ageValue) {
return ageValue < 40
});
or, better looks in chain:
var resultAgeValue = _(characters).pluck('age').find(function(ageValue) {
return ageValue < 40
});
try jsFiddle: http://jsfiddle.net/pqr/j8rL780u/
_.property
var array = [{a: 1, b: 2}, {a: 3, b: 4}]
array.map(_.property('a')) // => [1, 3]
_.map short hand
var array = [{a: 1, b: 2}, {a: 3, b: 4}]
_.map(array, 'a') // => [1, 3]