The Underscore library gives you a choice of programming style: functional VS. chaining. Under the right circumstances, I think chaining can lead to more readable code.
To demonstrate, lets clean up a very ādirtyā array using the two methods in Underscore.js Here is the array we will be working with:
let lottery = [
1, 2, 3,
'', 1, 4,
null, [
7,
6,
5,
],
33, 55, 3204, 463
];
The āFunctionalā Way
let unique = _.uniq(flattened);
let compacted = _.compact(unique);
let result = compacted;
This is how most beginners will approach this problem (with or without the help of underscore). Notice how we have to declare many variables that will only be used once, and the subsequent line must contain the variable created in the previous line passed in as an argument.
This can become an issue if we need to reorder the process because we would need to make sure we are passing in the previous variable created.
Lets try to rewrite this using the cleaner, chainable approach.
The āChainableā way
let result = _.chain(lottery)
.flatten()
.uniq()
.compact()
.value()
When we start with the _.chain
method, we are telling underscore to return a wrapped object (rather than just the result) that allows us to continue modifying the results with other underscore methods.
Once weāre finished making changes to the array, we simply chain .value to the end to get the final result. Benefits
- We can be much more explicit here with out saying as much.
- We also donāt pollute the namespace with all the extra variables.
- We donāt use as much memory because we arenāt storing any extra data.
- We donāt need to leave as many comments because the code reads almost like plain English.