There are two ways to create a lodash chain: implicit chaining and explicit chaining with the _.chain
method.
To use implicit chaining, you can call _(value)
on your value and, and then finish the chain with the .value()
method or with any method that returns a single value (e.g. .first()
, .max()
)
For example:
var maxFiltered = _(arr).filter(someFilter).max(someCallback);
In order to keep the value wrapped in the chain after any single-value method, chaining needs to be explicit, with the _.chain()
method.
For example:
var mergedFilteredMax = _.chain(arr).filter(someFilter).max(someCallback).assign(obj).value();
For more information, check out the Lodash documentation for chaining.
This rule takes one argument, the preferred style: implicit
, explicit
or as-needed
. (default is as-needed
).
The following patterns are considered problems:
/*eslint lodash/chain-style: [2, "as-needed"]*/
_.chain(val).map(f).filter(g).value(); // Unnecessary explicit chaining
_.chain(val).map(f).join(c).value(); // Unnecessary explicit chaining, the chain-breaking method join() is last in the chain.
/*eslint lodash/chain-style: [2, "implicit"]*/
_.chain(val).map(f).filter(g).value(); // Do not use explicit chaining
_.chain(val).map(f).first().assign(obj).value(); // Do not use explicit chaining
/*eslint lodash/chain-style: [2, "explicit"]*/
_(val).map(f).filter(g).value(); // Do not use implicit chaining
The following patterns are not considered warnings:
/*eslint lodash/chain-style: [2, "as-needed"]*/
_(val).map(f).filter(g).value();
_.chain(val).map(f).first().assign(obj).value();
/*eslint lodash/chain-style: [2, "implicit"]*/
_(val).map(f).filter(g).value();
/*eslint lodash/chain-style: [2, "explicit"]*/
_.chain(val).map(f).filter(g).value();
If you do not want to enforce a specific chain style, then you can disable this rule.