Here's an alternative that makes use of lodash' flow(), that executes property() to get the property of each item in an object (e.g. name), words(), to split strings into words (array), and lastly, first() to get the first item from an array.
var result = _.map(source, _.flow(_.property('name'), _.words, _.first));
var source = [{
"name": "John Smith"
}, {
"name": "Mary Kay"
}, {
"name": "Peter Pan"
}, {
"name": "Ben Franklin"
}];
var result = _.map(source, _.flow(_.property('name'), _.words, _.first));
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
Here's another implementation of the solution above that does not use flow() and property():
var result = _.map(source, function(item) {
return _(item.name).words().first();
});
var source = [{
"name": "John Smith"
}, {
"name": "Mary Kay"
}, {
"name": "Peter Pan"
}, {
"name": "Ben Franklin"
}];
var result = _.map(source, function(item) {
return _(item.name).words().first();
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>