Complete the following Lodash exercises. The goal is to become really good at
functional programming paradigm (e.g., _.map
, _.filter
, _.all
, _.any
...etc) and
a number of really useful Lodash methods (e.g., _.find
, _.pluck
... etc).
solution
blockfor/while
loop is allowedFamiliarity with programming in this way will not only make you a super productive programmer but also will pave the way for you to learn MapReduce and MongoDB.
[{name: 'John'}, {name: 'Mary'}, {name: 'Joe'}, {name: 'Ben'}]
4
4
return data.length
[{name: 'John'}, {name: 'Mary'}, {name: 'Joe'}, {name: 'Ben'}]
[ "John", "Mary", "Joe", "Ben" ]
[ "John", "Mary", "Joe", "Ben" ]
return _.map(data, function(d){ return d.name })
[{name: 'John'}, {name: 'Mary'}, {name: 'Joe'}, {name: 'Ben'}]
[ "John", "Joe" ]
[ "John", "Joe" ]
var names = _.pluck(data, 'name') var result = _.filter(names, function(d) { if (d[0] == "J") return d }); return result
[{name: 'John'}, {name: 'John'}, {name: 'John'}, {name: 'Ben'}]
3
3
var result = _.pluck(_.filter(data, {name: 'John'}), 'name'); return result.length
[{name: 'John Smith'}, {name: 'Mary Kay'}, {name: 'Peter Pan'}, {name: 'Ben Franklin'}]
[ "John", "Mary", "Peter", "Ben" ]
[ "John", "Mary", "Peter", "Ben" ]
var names = _.pluck(data, 'name') var result = _.map(names, function(d) { var firsts = d.split(' ')[0] return firsts }); return result
[{name: 'John Smith'}, {name: 'Mary Smith'}, {name: 'Peter Pan'}, {name: 'Ben Smith'}]
[ "John", "Mary", "Ben" ]
[ "John", "Mary", "Ben" ]
var people = _.pluck(data, 'name') var names = _.map(people, function(n) { return n.split(' ') }); var smiths = _.flatten(_.filter(names, function(n) { if (n[1] == "Smith") return n[0] })); var result = _.remove(smiths, function(n) { return n != "Smith"; }); return result
[{name: 'John Smith'}, {name: 'Mary Kay'}, {name: 'Peter Pan'}]
[ { "name": "Smith, John" }, { "name": "Kay, Mary" }, { "name": "Pan, Peter" } ]
[ { "name": "Smith, John" }, { "name": "Kay, Mary" }, { "name": "Pan, Peter" } ]
var names = _.pluck(data, 'name') var lastFirst = _.map(names, function(d) { var first = d.split(' ')[0]; var last = d.split(' ')[1]; return {"name": last.toString() + ", " + first.toString()} }); return lastFirst
[{name: 'John Smith', gender: 'm'}, {name: 'Mary Smith', gender: 'f'}, {name: 'Peter Pan', gender: 'm'}, {name: 'Ben Smith', gender: 'm'}]
1
1
var result = _.pluck(_.filter(data, {gender: 'f'}), 'gender'); return result.length
[{name: 'John Smith', gender: 'm'}, {name: 'Mary Smith', gender: 'f'}, {name: 'Peter Pan', gender: 'm'}, {name: 'Ben Smith', gender: 'm'}]
2
2
var men = _.pluck(_.filter(data, {gender: 'm'}), 'name'); var names = _.map(men, function(n) { return n.split(' ') }); var smiths = _.flatten(_.filter(names, function(n) { if (n[1] == "Smith") return n[0] })); var result = _.remove(smiths, function(n) { return n == "Smith"; }); return result.length
[{name: 'John Smith', gender: 'm'}, {name: 'Mary Smith', gender: 'f'}, {name: 'Peter Pan', gender: 'm'}, {name: 'Ben Smith', gender: 'm'}]
true
true
var women = _.pluck(_.filter(data, {gender: 'f'}), 'gender'); var men = _.pluck(_.filter(data, {gender: 'm'}), 'gender'); return men.length > women.length
[{name: 'John Smith', gender: 'm'}, {name: 'Mary Smith', gender: 'f'}, {name: 'Peter Pan', gender: 'm'}, {name: 'Ben Smith', gender: 'm'}]
"m"
"m"
var result = _.pluck(_.filter(data, {name: 'Peter Pan'}), 'gender'); return result[0]
[{name: 'John Smith', age: 54}, {name: 'Mary Smith', age: 42}, {name: 'Peter Pan', age: 15}, {name: 'Ben Smith', age: 35}]
54
54
return _.max(_.pluck(data, 'age'))
[{name: 'John Smith', age: 54}, {name: 'Mary Smith', age: 42}, {name: 'Peter Pan', age: 15}, {name: 'Ben Smith', age: 35}]
true
true
return _.all(data, function(d) { return d.age < 60 });
[{name: 'John Smith', age: 54}, {name: 'Mary Smith', age: 42}, {name: 'Peter Pan', age: 15}, {name: 'Ben Smith', age: 35}]
true
true
return _.some(data, function(d) { return d.age < 18 });
[{name: 'John Smith', age: 54, favorites: ['food', 'movies']}, {name: 'Mary Smith', age: 42, favorites: ['food', 'travel']}, {name: 'Peter Pan', age: 15, favorites: ['minecraft', 'pokemo']}, {name: 'Ben Smith', age: 35, favorites: ['craft', 'food']}]
3
3
var favorites = _.pluck(data, 'favorites') var food = _.countBy(favorites, function(n){ return _.includes(n, "food") }) return food.true
[{name: 'John Smith', age: 54, favorites: ['food', 'movies']}, {name: 'Mary Smith', age: 42, favorites: ['food', 'travel']}, {name: 'Peter Pan', age: 15, favorites: ['minecraft', 'pokemo']}, {name: 'Joe Johnson', age: 46, favorites: ['travel', 'movies']}, {name: 'Ben Smith', age: 35, favorites: ['craft', 'food']}]
[ "Mary Smith", "Joe Johnson" ]
[ "Mary Smith", "Joe Johnson" ]
var lovesTravel = _.map(data, function(d){ if ((d.age > 40) && (_.includes(d.favorites, 'travel'))) return d.name }) var names = _.filter(lovesTravel, function(d){ if (d != null) return d }) return names
[{name: 'John Smith', age: 54, favorites: ['food', 'movies']}, {name: 'Mary Smith', age: 42, favorites: ['food', 'travel']}, {name: 'Peter Pan', age: 15, favorites: ['minecraft', 'pokemo']}, {name: 'Joe Johnson', age: 46, favorites: ['travel', 'movies']}, {name: 'Ben Smith', age: 35, favorites: ['craft', 'food']}]
"John Smith"
"John Smith"
var lovesFood = _.map(data, function(d){ if (_.includes(d.favorites, 'food')) return d }) return (_.max(lovesFood, 'age')).name
[{name: 'John Smith', age: 54, favorites: ['food', 'movies']}, {name: 'Mary Smith', age: 42, favorites: ['food', 'travel']}, {name: 'Peter Pan', age: 15, favorites: ['minecraft', 'pokemo']}, {name: 'Joe Johnson', age: 46, favorites: ['travel', 'movies']}, {name: 'Ben Smith', age: 35, favorites: ['craft', 'food']}]
[ "food", "movies", "travel", "minecraft", "pokemo", "craft" ]
[ "food", "movies", "travel", "minecraft", "pokemo", "craft" ]
var favorites = _.pluck(data, 'favorites') return _.uniq(_.flatten(favorites))
[{name: 'John Smith', age: 54, favorites: ['food', 'movies']}, {name: 'Mary Smith', age: 42, favorites: ['food', 'travel']}, {name: 'Peter Pan', age: 15, favorites: ['minecraft', 'pokemo']}, {name: 'Joe Johnson', age: 46, favorites: ['travel', 'movies']}, {name: 'Ben Smith', age: 35, favorites: ['craft', 'food']}]
[ "Smith", "Pan", "Johnson" ]
[ "Smith", "Pan", "Johnson" ]
var names = _.pluck(data, 'name') var result = _.map(names, function(d) { var firsts = d.split(' ')[1] return firsts }); return _.uniq(result)