The thing about `reduce` is that you can't exit it. So yours keeps (harmlessly mind) trying deeper properties even if a higher one is missing. How about something like:
```
function deep(object, properties) {
    properties = _.isArray(properties) ? properties : properties.split('.'); 
    return object && _.first(properties) ? deep(object[_.first(properties)], _.rest(properties)) : object;
};
```