Since we are using LoDash Show archive.org snapshot instead of UnderscoreJS Show archive.org snapshot in recent/current projects, you should keep in mind that their syntax is a bit different.
UnderscoreJS
In UnderscoreJS, methods always return a value:
x = [1, 2, 2]
_.uniq(x) // => [1, 2]
_(x).uniq() // => [1, 2]
If you want to chain multiple calls, you need to start off with a _.chain, and call value() to terminate the chain.
_.chain(x).uniq().map(function(i) { return i + 10 }).reverse().value() // => [12, 11]
LoDash
In LoDash, methods called from _ (like _.uniq) will behave as in Underscore. However, using _(...) implies chaining and most (!) methods return a lodashWrapper object. You need to call value() to terminate your chain.
_.uniq(x) // => [1, 2]
_(x).uniq() // => lodashWrapper(...)
_(x).uniq().value() // [1, 2]
In turn, your LoDash code is a bit less clumsy when chaining:
_(x).uniq().map(function(i) { return i + 10 }).reverse().value() // => [12, 11]
Remember
So, as a rule of thumb for LoDash:
- When you need only one quick operation, use the methods from
_, like_.uniq(...) - When chaining multiple operations, wrap your object into
_(...)and callvalue()to terminate your chain. - In both LoDash and Underscore, some methods are terminal no matter how you run them. Example:
_(array).indexOf(something)
Note that there is also a "compatibility build" of LoDash which enables Underscore's behavior for LoDash. You should probably use it only when using LoDash as a drop-in replacement for Underscore, and migrate your code to the default LoDash syntax eventually.